> ## 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[]`: 送った引用ごとに1エントリ

* `id`: 不透明な識別子。結果内で一意です。
* `url`: 送った引用URL。
* `paragraphs[]`: 結果に含まれたそのページの段落。それぞれ `id`(結果全体で一意)と段落の `text` を持ちます。
  リンクなしで含まれる段落もあります。
* `error`: ページを読めなかった場合のみ存在します。このとき `paragraphs` は空で、文字列はそのソースに関する
  短い理由です。

### `links[]`: 段落ごとに1つの関係

* `paragraphId`: このリンクが対象とする段落。常に `sources[]` に存在する段落を指します。
* `answerRanges[]`: この段落に対応する回答の部分で、上と同じUTF-16オフセットの `start`/`end` ペアです。1つの
  リンクが複数の範囲を持つことがあり、同じ回答テキストが範囲間で重複することはありません。各範囲は回答の
  まとまり(文、リスト項目、表のセル)を丸ごと指します。
* `explanation`: 対応を説明する短い文。段落が回答のその部分について何を述べているかを記します。

### `insights[]`

この結果のリンクが総合して示す内容の短い要約です。`linkIds` は各要約の元になったリンクを示し、`links[]` に
あるリンクしか指せません。インサイトがレスポンスにない関係を主張することはありません。リンクがなければ、
要約するものもありません。

## 結果を正しく読む

* **リンクがないことは判定ではありません。** リンクのない段落は回答の範囲と一致しなかっただけで、範囲のない
  回答部分はリンクされた段落がなかっただけです。どちらもページが無関係、未使用、信頼できないという意味では
  ありません。
* **読めなかったページは不確かなままです。** `sources[].error` があれば、その引用は分析から除外されています。
  リンクがないことを否定的な結果と見なさないでください。重要なら再試行するか `body` を渡してください。
* **対応であって因果ではありません。** 結果は、既存の回答と既存のページテキストが事後的にどう対応するかを
  説明します。生成への影響を測ったり、ページを順位付けしたり、採点したり、回答の生成過程を報告したりはしません。
* **idは内部用です。** `p…`/`l…` の識別子を実行をまたいだ安定キーとして保存しないでください。1つの結果の中で
  のみ有効です。

## 実行と制限

* **サイズは失敗の理由になりません。** リクエスト契約が受け付けるもの、つまり最大200,000文字の `answer` と最大
  100件の引用はすべて分析します。長い回答、多数のソース、非常に長いページは、拒否せずに処理を分割して扱います。
* **深さはページではなく回答に比例します。** 長いページだからといって、回答が裏付けられる以上のリンクは
  生まれません。分析は回答に対応する可能性が最も高い箇所に集中し、対応があるすべてのソースが結果に表れます。
  大きなページや、同じ記述をナビゲーション、一覧、レビューで繰り返すページでは、すべての出現ではなく最も強い
  箇所を想定してください。
* **マークアップは根拠になりません。** サイトマップ、リンク索引、画像ギャラリーはリンクを生みません。それら
  だけでできたページは、対応を作り出さずに段落なしで報告されます。
* 読めなかったソースは、他に読めるソースがあればタスクを失敗させずに `sources[].error` で報告します。どの
  ソースも読めなかった場合、分析の失敗、タイムアウト、サービス設定エラーではタスクが失敗します。
* リクエストはAPIの他の部分と同様に使用量で計測します。送信レスポンスは一時的なクレジットの確保を示し、
  最終的な課金はタスクが終了状態に達したときに確定します。
