> ## 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.

# Source Influence

> 인용된 페이지의 어느 문단이 AI 답변의 어느 부분과 대응하는지, 정확한 답변 범위와 연결마다의 짧은 설명, 그 연결로 만든 요약까지

완료된 AI 답변을 그 답변이 인용한 출처와 비교합니다. 결과는 간결한 대응표입니다. 결과에 포함된 각
출처 페이지의 문단, 그 문단에 대응하는 답변 부분, 연결마다의 설명, 그리고 그 연결로 만든 짧은 요약을
담습니다.

이는 기존 답변에 대한 사후 대응 분석입니다. 출처가 모델로 하여금 문장을 생성하게 했다는 증거도, 페이지
품질 점수도 아닙니다. 판결이 아니라 살펴볼 근거로 다루세요.

```bash theme={null}
curl -X POST https://api.querying.ai/v1/source-influence \
  -H "Authorization: Bearer $QUERYING_API_KEY" -H "Content-Type: application/json" \
  -d '{
    "answer": "…the AI answer, as raw markdown…",
    "prompt": "best password manager for a small team",
    "engine": "CHATGPT",
    "brand": "1Password",
    "competitors": ["Bitwarden"],
    "citations": [
      { "url": "https://example.com/best-password-managers", "body": "…the page markdown…" },
      { "url": "https://another.example.com/pricing" }
    ]
  }'
```

`GET /v1/async/task/:id`를 폴링하거나 제출할 때 `webhook.url`을 지정하세요. 태스크는
`taskType: "SOURCE_INFLUENCE"`로 보고됩니다. 이 분석은 `POST /v1/async/task`로 제출하지 말고 전용
엔드포인트를 쓰세요. `POST /v1/research`와 `CITATION_ATTRIBUTION` 태스크 유형은 2026년 9월 이전 이름이며,
지원 중단 별칭으로 계속 동작합니다.

### 이미 실행한 태스크 분석

답변이 이 API에서 나왔다면, 결과에서 답변과 인용을 복사하는 대신 태스크 id를 보내세요.

```bash theme={null}
curl -X POST https://api.querying.ai/v1/source-influence \
  -H "Authorization: Bearer $QUERYING_API_KEY" -H "Content-Type: application/json" \
  -d '{ "taskId": "7c1f…", "brand": "1Password", "competitors": ["Bitwarden"] }'
```

태스크는 본인 소유이고 `COMPLETED` 상태이며 `GET /v1/async/task/:id`로 아직 읽을 수 있어야 합니다.
답변 Markdown(엔진이 Markdown을 반환하지 않았다면 텍스트)이 `answer`가 되고, 인용 URL이 엔진 순서대로
`citations`가 됩니다. 처음 100개까지이며 토론 스레드는 최대 10개입니다. 상품·동영상 카드 자리표시자
(`googleusercontent.com` 링크)와 Google 검색 링크는 읽을 페이지가 없으므로 건너뜁니다. 따로 보내지 않으면
태스크의 `prompt`, `country`, 엔진을 씁니다. `taskId`를 `answer`나 `citations`와 함께 보내면 `400`으로
거부되며, 끝나지 않았거나 답변 텍스트나 인용 URL이 없는 태스크도 마찬가지입니다. 알 수 없거나 만료된
태스크 id는 `404`를 반환합니다.

## Payload

| 필드 | 필수 | 설명 |
| - | - | - |
| `taskId` | `answer` + `citations` 대신 | 본인의 완료된 답변 태스크. 위를 참고하세요. |
| `answer` | 예 (`taskId`가 없을 때) | 원본 답변 Markdown, 1–200,000자. 수정하지 마세요. 모든 범위는 바로 이 텍스트의 UTF-16 오프셋입니다. |
| `citations[]` | 예 (`taskId`가 없을 때) | 출처 1–100개, 토론 스레드 URL은 최대 10개. |
| `citations[].url` | 예 | HTTP(S) URL, 최대 2,048자. |
| `citations[].body` | 아니요 | 출처 Markdown, 인용당 최대 300,000자이며 요청 본문 전체는 최대 1 MiB. 보낸 본문은 그대로 분석하며 새로 가져온 내용으로 바꾸지 않습니다. 본문이 없으면 페이지를 가져오고, 읽지 못한 페이지는 해당 출처에 `error`로 보고합니다. |
| `citations[].kind` | 아니요 | `inline` 또는 `panel`. 생략하면 답변 링크로 판별합니다. |
| `prompt` | 아니요 | 원래 질문. 기존 연동과의 호환을 위해 받으며 결과에는 반환하지 않습니다. |
| `engine` | 아니요 | 답변을 만든 AI 엔진. 같은 호환용 맥락이며 반환하지 않습니다. |
| `brand` | 아니요 | 내 브랜드 이름. 같은 호환용 맥락이며 반환하지 않습니다. |
| `competitors[]` | 아니요 | 경쟁사 이름 최대 25개. 같은 호환용 맥락이며 반환하지 않습니다. |
| `country` | 아니요 | 출처를 가져올 국가, 기본값 `US`. |

<Warning>
  `analysis` 옵트인은 폐지되었습니다.
  이전 버전은 `analysis: {version: 1, …}`을 받았습니다. 이제 인사이트는 모든 결과에 포함되므로 이 필드는
  무시되지 않고 `400`으로 거부됩니다. 기존 연동에서 제거하세요. 기존 태스크 내용은 계속 읽을 수 있으며,
  저장된 기록은 마이그레이션하지 않습니다.
</Warning>

## 결과

```json theme={null}
{
  "answer": "Teams plan starts at $19.95 per month for up to 10 users. The Business plan adds audit logs.",
  "sources": [
    {
      "id": "s1",
      "url": "https://example.com/pricing",
      "paragraphs": [
        { "id": "p1", "text": "Teams: $19.95 / month, up to 10 users." },
        { "id": "p2", "text": "Business adds audit logs and SSO." }
      ]
    },
    {
      "id": "s2",
      "url": "https://review.example.com/note",
      "paragraphs": [],
      "error": "…"
    }
  ],
  "links": [
    { "id": "l1", "paragraphId": "p1", "answerRanges": [{ "start": 0, "end": 57 }], "explanation": "States the same price and seat cap." },
    { "id": "l2", "paragraphId": "p2", "answerRanges": [{ "start": 58, "end": 92 }], "explanation": "Names the audit-log add-on." }
  ],
  "insights": [
    { "summary": "The pricing page covers both statements; the review page could not be read.", "linkIds": ["l1", "l2"] }
  ]
}
```

### `answer`

제출한 답변을 그대로 돌려줍니다. `answerRanges`는 바로 이 문자열의 오프셋입니다. JavaScript UTF-16 코드
단위이며, `start`는 포함, `end`는 제외입니다. 텍스트를 다시 나누지 말고 `answer.slice(start, end)`처럼
그대로 잘라 쓰세요. 모든 범위는 답변의 온전한 의미 단위(문장, 목록 항목, 표 셀) 하나를 가리키며, 경계는
원문 기준입니다.

### `sources[]`: 보낸 인용마다 한 항목

* `id`: 불투명 식별자, 결과 안에서 고유합니다.
* `url`: 보낸 인용 URL.
* `paragraphs[]`: 결과에 포함된 그 페이지의 문단. 각각 `id`(결과 전체에서 고유)와 문단 `text`를 가집니다.
  연결 없이 포함되는 문단도 있습니다.
* `error`: 페이지를 읽지 못했을 때만 있습니다. 이때 `paragraphs`는 비어 있고, 문자열은 그 출처에 대한
  짧은 이유입니다.

### `links[]`: 문단마다 한 관계

* `paragraphId`: 이 연결이 가리키는 문단. 항상 `sources[]`에 있는 문단을 가리킵니다.
* `answerRanges[]`: 이 문단에 대응하는 답변 부분으로, 위와 같은 UTF-16 오프셋의 `start`/`end` 쌍입니다.
  한 연결에 범위가 여러 개일 수 있으며, 같은 답변 텍스트가 범위 사이에 중복되지 않습니다. 각 범위는
  온전한 답변 단위(문장, 목록 항목, 표 셀)입니다.
* `explanation`: 대응을 설명하는 짧은 문장. 문단이 답변의 그 부분에 대해 무엇을 말하는지 적습니다.

### `insights[]`

이 결과의 연결들이 종합해 말하는 바를 짧게 요약합니다. `linkIds`는 각 요약의 근거가 된 연결을 가리키며
`links[]`에 있는 연결만 가리킬 수 있습니다. 인사이트는 응답에 없는 관계를 주장하지 않습니다. 연결이
없으면 요약할 것도 없습니다.

## 결과를 올바르게 읽기

* **연결이 없다고 판결이 아닙니다.** 연결 없는 문단은 답변 범위와 맞지 않았을 뿐이고, 범위가 없는 답변
  부분은 연결된 문단이 없다는 뜻일 뿐입니다. 둘 다 페이지가 무관하다거나, 쓰이지 않았다거나, 신뢰할 수
  없다는 뜻이 아닙니다.
* **읽지 못한 페이지는 불확실한 채로 남습니다.** `sources[].error`가 있으면 그 인용은 분석에서 빠졌습니다.
  연결이 없는 것을 부정적 결과로 보지 마세요. 중요하다면 재시도하거나 `body`를 보내세요.
* **대응이지 인과가 아닙니다.** 결과는 기존 답변과 기존 페이지 텍스트가 사후에 어떻게 맞물리는지를
  설명합니다. 생성 영향력을 재거나, 페이지 순위를 매기거나, 페이지를 채점하거나, 답변이 어떻게
  만들어졌는지 보고하지 않습니다.
* **id는 내부용입니다.** `p…`/`l…` 식별자를 실행 간 안정적인 키로 저장하지 마세요. 결과 하나에만 유효합니다.

## 실행과 한도

* **크기는 실패 사유가 아닙니다.** 요청 계약이 받는 것, 즉 최대 200,000자의 `answer`와 최대 100개 인용은
  모두 분석합니다. 긴 답변, 많은 출처, 아주 긴 페이지는 거부하지 않고 작업을 나눠 처리합니다.
* **깊이는 페이지가 아니라 답변에 비례합니다.** 긴 페이지라고 답변이 뒷받침할 수 있는 것보다 많은 연결이
  나오지 않습니다. 분석은 답변과 대응할 가능성이 가장 높은 구절에 집중하며, 대응이 있는 모든 출처가
  결과에 나타납니다. 큰 페이지나 같은 내용을 내비게이션, 목록, 리뷰에 반복하는 페이지에서는 모든 등장이
  아니라 가장 강한 구절을 기대하세요.
* **마크업은 근거가 아닙니다.** 사이트맵, 링크 색인, 이미지 갤러리는 연결을 만들지 않습니다. 이것들로만
  이루어진 페이지는 대응을 지어내지 않고 문단 없이 보고합니다.
* 읽지 못한 출처는 다른 출처를 읽을 수 있으면 태스크를 실패시키지 않고 `sources[].error`로 보고합니다.
  어떤 출처도 읽지 못했거나, 분석 실패, 타임아웃, 서비스 설정 오류가 있으면 태스크가 실패합니다.
* 요청은 API의 나머지와 마찬가지로 사용량으로 계량합니다. 제출 응답은 임시 크레딧 홀드를 보여주고, 최종
  과금은 태스크가 종료 상태에 도달할 때 정산됩니다.
