> ## Documentation Index
> Fetch the complete documentation index at: https://docs.querying.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# 모니터 근거: 인용 출처, 답변, 결과 내보내기

> 엔진이 인용하는 페이지를 확인하고, 어떤 숫자든 그 뒤의 정확한 답변을 열고, 모니터의 채점된 답변을 JSON이나 CSV로 내보냅니다.

[모니터 리포트](/ko/monitors/reports.md)의 모든 숫자는 직접 열어 볼 수 있는 채점된 답변에서 나옵니다. 이 페이지는 그 답변을
보여 주는 조회 엔드포인트를 다룹니다. 어떤 출처가 인용되는지, 인용이 시간에 따라 어떻게 움직이는지, 점수 하나 뒤의 답변,
프롬프트 하나의 상세, 위치별 답변, 전체 내보내기입니다. 저장된 결과만 읽으므로 비용이 들지 않습니다.

| 엔드포인트 | 답하는 질문 |
| - | - |
| [`GET /v1/monitors/{id}/sources`](#인용되는-출처) | 어떤 도메인이나 페이지가 인용되는지. 모든 행에 커서로 닿을 수 있습니다. |
| [`GET /v1/monitors/{id}/citations`](#인용-추이) | 인용 합계와 상위 도메인, 페이지의 일별 시계열. |
| [`GET /v1/monitors/{id}/answers/{taskId}`](#답변-하나-읽기) | 점수 하나 뒤에 저장된 답변. |
| [`GET /v1/monitors/{id}/prompt`](#프롬프트-하나-자세히-보기) | 프롬프트 하나의 일별 시계열, 출처, 최근 답변. |
| [`GET /v1/monitors/{id}/grid`](#위치별-답변) | 모니터의 위치나 그리드의 지점별 답변. |
| [`GET /v1/monitors/{id}/results`](#채점된-답변-내보내기) | 채점된 답변 자체, JSON 또는 CSV. |

## 인용되는 출처

`GET /v1/monitors/{id}/sources`([레퍼런스](/ko/api-reference/monitors/list-sources.md))는 엔진이 인용한 도메인이나
페이지의 순위를 리포트와 같은 기간과 필터로 냅니다. 원시 인용 수가 아니라 **서로 다른 답변 수**를 세므로, 한 답변에서 세 번
인용된 페이지는 한 번으로 셉니다.

```bash theme={"theme":"css-variables"}
curl "https://api.querying.ai/v1/monitors/$MONITOR_ID/sources?days=30&groupBy=domain&limit=2" \
  -H "Authorization: Bearer $QUERYING_API_KEY"
```

| 파라미터 | 설명 |
| - | - |
| `groupBy` | `domain`(기본값): `www.`, 포트, 인증 정보를 뗀 호스트. `page`: 전체 URL. |
| `limit` | 1–100, 기본값 20. |
| `cursor` | 이전 응답의 `nextCursor`를 그대로. |
| `days`, `since`, `until`, `engine`, `prompt` | [리포트](/ko/monitors/reports.md#쿼리-파라미터)와 같습니다. |

예를 들면 다음과 같습니다.

```json theme={"theme":"css-variables"}
{
  "success": true,
  "data": {
    "results": [
      {
        "key": "reviews.example",
        "domain": "reviews.example",
        "url": null,
        "label": "Best wireless earbuds of 2026",
        "citations": 11,
        "prompts": 2,
        "own": false,
        "evidenceTaskId": "6f1c2a9e-3b4d-4e5f-8a7b-1c2d3e4f5a61"
      },
      {
        "key": "rtings.example",
        "domain": "rtings.example",
        "url": null,
        "label": "Earbuds reviews",
        "citations": 7,
        "prompts": 1,
        "own": false,
        "evidenceTaskId": "6f1c2a9e-3b4d-4e5f-8a7b-1c2d3e4f5a62"
      }
    ],
    "nextCursor": "eyJrZXkiOiJydGluZ3MuZXhhbXBsZSIsImNpdGF0aW9ucyI6N30",
    "groupBy": "domain",
    "window": { "since": "2026-09-19T07:00:00.000Z", "until": "2026-10-19T07:00:00.000Z" },
    "filters": { "engine": null, "prompt": null },
    "counting": "distinct_answers",
    "ownership": "current_monitor_domains"
  }
}
```

| 필드 | 의미 |
| - | - |
| `citations` | 이 도메인이나 페이지를 인용한 답변 수. |
| `prompts` | 답변이 이것을 인용한 서로 다른 프롬프트 수. |
| `own` | 모니터의 현재 `domains` 중 하나이거나 그 하위 도메인인지(`ownership: "current_monitor_domains"`). |
| `url` | `groupBy=page`일 때 페이지 URL. 도메인은 `null`. |
| `label` | 엔진이 준 인용 레이블(있는 경우). |
| `evidenceTaskId` | 이것을 인용한 답변 하나. [답변 엔드포인트](#답변-하나-읽기)로 여세요. |

행은 `citations`, 그다음 `key` 순으로 정렬합니다. 마지막 페이지에서 `nextCursor`는 `null`입니다. 상위 N개 자르기가 없으므로
기간 안에 인용된 모든 도메인이나 페이지에 닿을 수 있습니다. 커서는 불투명한 값으로 다루세요.

## 인용 추이

`GET /v1/monitors/{id}/citations`([레퍼런스](/ko/api-reference/monitors/get-citations.md))는 대시보드 인용 차트 뒤의
데이터를 반환합니다. 기간 합계, 일별 시계열, 그리고 각자 일별 시계열을 가진 상위 도메인과 페이지 20개입니다.

```bash theme={"theme":"css-variables"}
curl "https://api.querying.ai/v1/monitors/$MONITOR_ID/citations?days=30&kind=owned" \
  -H "Authorization: Bearer $QUERYING_API_KEY"
```

| 파라미터 | 설명 |
| - | - |
| `days` | `7`, `30`(기본값), `90`. |
| `since`, `until` | 리포트와 같은 고정 기간. 지정하면 `days`는 `windowDays`로 되돌려 줄 뿐입니다. |
| `engine` | 엔진 하나, 또는 `all`(기본값). |
| `prompt` | 프롬프트 하나, 정확한 텍스트. |
| `kind` | `all`(기본값), `owned`, `editorial`, `review_media`, `pr_wire`, `institution`, `reviews`, `commerce`, `social`, `blog`, `community`, `video`, `brand`, `content`, `other`. |
| `q` | 이름에 이 텍스트가 든 도메인, URL에 이 텍스트가 든 페이지만 남깁니다. 최대 200자. |
| `offset` | 0–10,000. 도메인과 페이지 목록을 20개씩 넘깁니다. |

여기서 인용 1건은 답변 하나에 나온 페이지 하나이므로, `citations`는 답변이 아니라 인용된 페이지를 셉니다. `/sources`는 서로
다른 답변 수를 세므로 숫자가 다를 수 있습니다.

| 필드 | 내용 |
| - | - |
| `totals` | 기간의 `answers`(채점된 답변), `citedAnswers`, `citations`, `ownedCitations`. |
| `days` | 답변이 있는 UTC 날짜마다 한 항목: `day`, `answers`, `citations`, `ownedCitations`. 답변은 있지만 인용이 없는 날은 `citations: 0`이고, 답변이 없는 날은 빠집니다. |
| `domains`, `pages` | `offset`부터 최대 20행: `key`, `domain`, `label`, `kind`, `owned`, `citations`, `answers`, `prompts`, 그리고 인용이 있는 날의 `{ day, citations }` 목록인 `daily`. |
| `types` | `kind`별 `citations`와 서로 다른 `domains` 수. |
| `pagination` | `offset`, `limit`(20), `totalDomains`, `totalPages`. |
| `windowDays`, `engine`, `prompt`, `since`, `until` | 읽은 범위. |

내 도메인의 `kind`는 `owned`입니다. 나머지 종류는 알려진 퍼블리셔의 고정 목록에서 오며, 알 수 없는 곳은 `other`입니다. 출처의
점유율은 그 `citations`를 `totals.citations`로 나눈 값입니다. `kind`, `q`, `offset`은 `domains`, `pages`, `pagination`만
좁히고, `totals`, `days`, `types`는 항상 기간 안의 모든 출처를 기준으로 합니다.

## 답변 하나 읽기

`GET /v1/monitors/{id}/answers/{taskId}`([레퍼런스](/ko/api-reference/monitors/get-answer.md))는 점수 하나 뒤에 저장된
답변을 비교 대상과 함께 반환하므로, 언급을 믿지 않고 확인할 수 있습니다. 태스크 id는 리포트의 `evidenceTaskId`,
`mentionTaskId`, `latestTaskId`, `/sources`, 내보낸 행에서 얻습니다.

```bash theme={"theme":"css-variables"}
curl "https://api.querying.ai/v1/monitors/$MONITOR_ID/answers/6f1c2a9e-3b4d-4e5f-8a7b-1c2d3e4f5a61" \
  -H "Authorization: Bearer $QUERYING_API_KEY"
```

예를 들면 다음과 같습니다.

```json theme={"theme":"css-variables"}
{
  "success": true,
  "data": {
    "answer": {
      "taskId": "6f1c2a9e-3b4d-4e5f-8a7b-1c2d3e4f5a61",
      "engine": "CHATGPT",
      "prompt": "best wireless earbuds for commuting",
      "mentioned": true,
      "cited": true,
      "position": 81,
      "ranAt": "2026-10-17T09:01:48.311Z",
      "answerText": "For commuting, look at the **Northwind Audio Pro** for noise cancelling or the **Acme Audio Air** for battery life.",
      "sources": [
        { "url": "https://reviews.example/best-earbuds", "label": "Best wireless earbuds of 2026", "position": 1 },
        { "url": "https://acme-audio.example/air", "label": "Acme Audio Air", "position": 2 }
      ],
      "competitorHits": ["Northwind Audio"],
      "scoringContext": {
        "aliases": ["Acme Audio", "Acme"],
        "domains": ["acme-audio.example"],
        "competitors": [
          { "name": "Northwind Audio", "aliases": ["Northwind Audio"], "source": "user" },
          { "name": "Contoso Sound", "aliases": ["Contoso Sound", "Contoso"], "source": "user" }
        ],
        "country": "US",
        "version": "3f9a6c1e8b2d4f7a9c0e1b3d5f7a9c1e3b5d7f9a1c3e5b7d9f1a3c5e7b9d1f3a",
        "scoredAt": "2026-10-17T09:01:48.305Z",
        "answerPresent": true,
        "evidenceTruncated": false
      },
      "analysis": null
    },
    "display": {
      "markdown": "For commuting, look at the **Northwind Audio Pro** for noise cancelling or the **Acme Audio Air** for battery life.",
      "text": "For commuting, look at the Northwind Audio Pro for noise cancelling or the Acme Audio Air for battery life."
    },
    "mode": "BRAND",
    "aliases": ["Acme Audio", "Acme"],
    "competitors": [
      { "name": "Northwind Audio", "aliases": ["Northwind Audio"], "source": "user" },
      { "name": "Contoso Sound", "aliases": ["Contoso Sound", "Contoso"], "source": "user" }
    ],
    "scoringKnown": true,
    "evidenceTruncated": false
  }
}
```

| 필드 | 의미 |
| - | - |
| `answer` | 저장된 그대로의 채점된 답변. |
| `answer.answerText` | 답변. 엔진이 markdown으로 줬으면 markdown이며, 8,000자에서 자르고 끝에 `…`를 붙입니다. 엔진이 텍스트를 반환하지 않았으면 `null`. |
| `answer.sources` | 엔진 순서대로의 인용 페이지. URL로 중복을 제거하고 각각 `label`과 1부터 시작하는 `position`을 가집니다. |
| `answer.competitorHits` | 답변에 언급된 경쟁사. |
| `answer.position` | 내 브랜드가 처음 일치한 곳의 문자 오프셋, 또는 `null`. |
| `answer.scoringContext` | 답변 채점에 쓴 정의: `aliases`, `domains`, `competitors`, `country`, `version` 해시, `scoredAt`, `answerPresent`, `evidenceTruncated`. 저장되기 전에 채점된 답변은 `null`. |
| `answer.analysis` | 모니터에 `analysis: true`가 있으면 [답변 분석](/ko/engines/answer-analysis.md) 결과, 아니면 `null`. |
| `display` | 원본 태스크 응답의 표시용 필드. 엔진에 따라 `markdown`, `text`, `sources`, `searchQueries`, 레이아웃, 장소, 상품 등입니다. 원본 태스크가 더 이상 저장되어 있지 않으면 `null`. |
| `mode` | 모니터의 모드. 카테고리 모니터에서는 `aliases`가 비어 있고 `competitors`가 추적 브랜드 목록입니다. |
| `aliases`, `competitors` | 이 답변의 비교 대상: `scoringContext`의 값, 그것이 `null`이면 모니터의 현재 값. |
| `scoringKnown` | 답변이 채점 맥락 저장 이전의 것이면 `false`. 이때 `aliases`와 `competitors`는 모니터의 현재 값입니다. |
| `evidenceTruncated` | `answerText`가 잘렸는지. `scoringKnown`이 `false`이면 `null`. |

이 모니터의 채점된 답변이 아닌 태스크 id는 `404 NOT_FOUND`를 반환합니다.

## 프롬프트 하나 자세히 보기

`GET /v1/monitors/{id}/prompt`([레퍼런스](/ko/api-reference/monitors/get-prompt.md))는 프롬프트 하나의 데이터를
반환합니다. `prompt`(정확한 텍스트)는 필수이며 모니터에서 이미 뺀 프롬프트에도 쓸 수 있습니다. `days`는 `7`, `30`(기본값),
`90`입니다.

```bash theme={"theme":"css-variables"}
curl -G "https://api.querying.ai/v1/monitors/$MONITOR_ID/prompt" \
  --data-urlencode "prompt=best wireless earbuds for commuting" \
  --data-urlencode "days=30" \
  -H "Authorization: Bearer $QUERYING_API_KEY"
```

| 필드 | 내용 |
| - | - |
| `monitor` | `id`, `name`, `engines`, `aliases`. |
| `prompt`, `windowDays` | 읽은 대상. |
| `series` | UTC 일자와 엔진별: `day`, `engine`, `runs`, `mentioned`, `cited`. |
| `topDomains` | 인용된 도메인 최대 12개: `domain`, `citations`, `prompts`, `own`. |
| `topPages` | 인용된 페이지 최대 20개: `url`, `domain`, `label`, `citations`, `prompts`, `own`. |
| `results` | 최신 채점된 답변 최대 100개: `taskId`, `engine`, `prompt`, `mentioned`, `cited`, `position`, `ranAt`, `competitorHits`. |

여기서 `citations`는 서로 다른 답변 수가 아니라 답변 전체에서 인용된 페이지 수입니다. 프롬프트 하나의 전체 출처 목록을
페이지네이션으로 받으려면 `/sources?prompt=...`를 쓰세요.

## 위치별 답변

`GET /v1/monitors/{id}/grid`([레퍼런스](/ko/api-reference/monitors/get-grid.md))는 모니터의 현재
[위치나 그리드](/ko/monitors.md#위치와-그리드)의 지점별 답변을 반환합니다. 선택적인 `engine`(모니터의 엔진 중 하나)과
`prompt`로 좁히며, `days`는 `7`, `30`(기본값), `90`입니다.

응답에는 `location`, `grid`, `engine`, `prompt`, `windowDays`, `points`가 있습니다. 각 지점에는 `row`, `col`, `location`,
`runs`, `mentioned`, `cited`, `topCompetitor`(`{ name, mentions }` 또는 `null`), `latest`(최신 답변의
`{ taskId, engine, mentioned, ranAt }` 또는 `null`)가 있습니다. 답변은 정확한 좌표로 지점에 연결하므로, 같은 모니터의 이전
위치나 그리드에서 나온 답변은 빠집니다. 위치나 그리드가 없는 모니터는 지점을 반환하지 않습니다.

## 채점된 답변 내보내기

`GET /v1/monitors/{id}/results`([레퍼런스](/ko/api-reference/monitors/export-results.md))는 채점된 답변 자체를
반환합니다. 데이터 웨어하우스 적재, 스프레드시트, 보고 자료에 쓰세요. 새 답변을 모두 일정에 따라 클라우드 스토리지로
보내려면 [결과 내보내기](/ko/exports.md)를 참고하세요.

```bash theme={"theme":"css-variables"}
curl "https://api.querying.ai/v1/monitors/$MONITOR_ID/results?since=2026-10-01T00:00:00Z&until=2026-10-18T00:00:00Z&mentioned=false" \
  -H "Authorization: Bearer $QUERYING_API_KEY"
```

| 파라미터 | 설명 |
| - | - |
| `since`, `until` | 반개구간. 기본값은 현재 시점에서 끝나는 최근 30일. 시간대가 포함된 ISO 시각이며, 여기서는 단순 `YYYY-MM-DD`도 받아 UTC 자정으로 읽습니다. 최대 기간은 없습니다. |
| `engine`, `prompt` | 리포트와 같습니다. |
| `mentioned`, `cited` | `true` 또는 `false`. `mentioned=false`가 격차 보기입니다. |
| `competitor` | 저장된 경쟁사 히트에 이 이름이 정확히 든 답변만 남깁니다, 1–80자. 각 답변을 채점할 때 저장된 이름과 비교하며 모니터의 현재 경쟁사와 대조하지 않습니다. 모니터가 추적한 적 없는 이름은 오류가 아니라 빈 결과를 반환합니다. |
| `includeEvidence` | `true`이면 모든 행에 `answerText`, `sources`, `scoringContext`를 더합니다. |
| `limit` | 1–10,000, 기본값 10,000. `includeEvidence=true`이면 1–100, 기본값 100. |
| `format` | `json`(기본값) 또는 `csv`. |
| `cursor` | 이전 페이지의 `nextCursor`. |

JSON 응답 예시입니다.

```json theme={"theme":"css-variables"}
{
  "success": true,
  "data": {
    "monitor": { "id": "d39b8de0-b159-4229-bf58-7064e5369db1", "name": "Earbud brand tracking" },
    "since": "2026-10-01T00:00:00.000Z",
    "until": "2026-10-18T00:00:00.000Z",
    "filters": { "engine": null, "prompt": null, "mentioned": false, "cited": null, "competitor": null },
    "truncated": false,
    "nextCursor": null,
    "results": [
      {
        "id": "0b6e4a52-7c1d-4f8e-9a3b-2d5c6e7f8a91",
        "taskId": "6f1c2a9e-3b4d-4e5f-8a7b-1c2d3e4f5a63",
        "engine": "CHATGPT",
        "prompt": "are cheap earbuds worth it",
        "mentioned": false,
        "cited": false,
        "position": null,
        "ranAt": "2026-10-17T09:02:57.204118Z",
        "competitorHits": ["Northwind Audio"]
      }
    ]
  }
}
```

행은 최신순입니다. 페이지네이션은 `ranAt`(마이크로초 정밀도)과 행 `id`의 키셋 방식이므로 같은 시각을 공유하는 행도 빠지거나
반복되지 않습니다. 추출을 반복 가능하게 하려면 명시적인 `since`와 `until`을 보내고, 고정한 채로, `nextCursor`가 `null`이 될
때까지 따라가세요. 페이지 사이에 기간을 바꾸면 행이 빠지거나 반복될 수 있습니다. 커서는 불투명한 값으로 다루세요.

### CSV

`format=csv`이면 응답은 `text/csv`이며, 스프레드시트 앱이 올바르게 열도록 BOM이 붙은 UTF-8입니다. CSV 본문에는
페이지네이션을 담을 수 없으므로 헤더로 옮겨 갑니다.

| 헤더 | 의미 |
| - | - |
| `x-next-cursor` | 다음 페이지의 커서. 마지막 페이지에서는 비어 있습니다. |
| `x-result-truncated` | 이 페이지가 반환한 것보다 많은 행이 일치하면 `true`. |
| `x-result-since`, `x-result-until` | 해석된 기간. 이어서 내보낼 때 고정할 수 있습니다. |

열은 `ran_at, monitor, engine, prompt, mentioned, cited, position, competitors, task_id`이고, `includeEvidence=true`이면
`answer_text, sources, scoring_context`가 더해집니다. `competitors`는 이름을 `|`로 잇고, `sources`와
`scoring_context`는 JSON 텍스트를 담습니다. `=`, `+`, `-`, `@`, 탭, 캐리지 리턴으로 시작하는 셀은 앞에 `'`를 붙이므로
엔진 텍스트가 스프레드시트 수식이 되지 않습니다.

```bash theme={"theme":"css-variables"}
curl -D headers.txt -o page1.csv \
  "https://api.querying.ai/v1/monitors/$MONITOR_ID/results?since=2026-10-01T00:00:00Z&until=2026-10-18T00:00:00Z&format=csv&includeEvidence=true" \
  -H "Authorization: Bearer $QUERYING_API_KEY"
```

## 오류와 한도

| 한도 | 값 |
| - | - |
| 리포트와 출처 기간 | 90일 |
| `/sources` 페이지 | 1–100행, 기본값 20 |
| `/citations` 목록 | 페이지당 20행, `offset` 최대 10,000 |
| `/results` 페이지 | 10,000행, `includeEvidence=true`이면 100 |
| 저장된 답변 텍스트 | 8,000자 |
| `/prompt` | 도메인 12개, 페이지 20개, 답변 100개 |

잘못된 파라미터는 문제를 알려 주며 `400 VALIDATION_ERROR`를 반환합니다. 이전 페이지가 반환하지 않은 커서도 여기에
해당합니다. 다른 계정의 모니터나 알 수 없는 태스크 id는 `404 NOT_FOUND`를 반환합니다. 공통 코드는
[모니터](/ko/monitors.md#오류)를 참고하세요.

## 다음 단계

> **[이벤트와 알림](/ko/monitors/events-and-alerts.md)**
>
> 프롬프트의 답변이 바뀌면 웹훅을 받습니다.

> **[결과 내보내기](/ko/exports.md)**
>
> 채점된 답변을 일정에 따라 내 스토리지로 보냅니다.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.