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

> Welche Absätze einer zitierten Seite welchen Teilen einer KI-Antwort entsprechen, mit exakten Antwortbereichen, einer kurzen Erklärung je Verknüpfung und kurzen Zusammenfassungen daraus

Vergleichen Sie eine abgeschlossene KI-Antwort mit ihren zitierten Quellen. Das Ergebnis ist eine kompakte Zuordnung:
die im Ergebnis enthaltenen Absätze jeder Quellseite, die Teile der Antwort, denen sie entsprechen, eine Erklärung für
jede Verknüpfung und kurze Zusammenfassungen, die aus diesen Verknüpfungen gebildet werden.

Es handelt sich um eine nachträgliche Entsprechungsanalyse einer vorhandenen Antwort. Sie beweist nicht, dass eine
Quelle das Modell zu einem Satz veranlasst hat, und bewertet nicht die Qualität einer Seite. Behandeln Sie sie als
Beleg zur Prüfung, nicht als Urteil.

```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" }
    ]
  }'
```

Pollen Sie `GET /v1/async/task/:id` oder geben Sie beim Einreichen `webhook.url` an; der Task meldet
`taskType: "SOURCE_INFLUENCE"`. Reichen Sie diese Analyse nicht über `POST /v1/async/task` ein, sondern nutzen Sie den
eigenen Endpunkt. `POST /v1/research` und der Task-Typ `CITATION_ATTRIBUTION` sind die Namen vor September 2026 und
funktionieren weiterhin als veraltete Aliase.

### Einen bereits ausgeführten Task analysieren

Stammt die Antwort aus dieser API, senden Sie ihre Task-id, statt Antwort und Quellen aus dem Ergebnis zu kopieren:

```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"] }'
```

Der Task muss Ihnen gehören, `COMPLETED` sein und über `GET /v1/async/task/:id` noch lesbar sein. Sein Antwort-Markdown
(Text, wenn die Engine kein Markdown geliefert hat) wird zu `answer`, und seine zitierten URLs werden in der
Reihenfolge der Engine zu `citations`: die ersten 100, davon höchstens 10 Diskussionsthreads. Platzhalter für Produkt-
und Videokarten (`googleusercontent.com`-Links) und Google-Suchlinks werden übersprungen, da sie keine lesbare Seite
haben. `prompt`, `country` und Engine des Tasks werden verwendet, sofern Sie sie nicht mitsenden. `taskId` zusammen mit
`answer` oder `citations` zu senden wird mit `400` abgelehnt, ebenso ein unfertiger Task oder einer ohne Antworttext
oder zitierte URL. Eine unbekannte oder abgelaufene Task-id liefert `404`.

## Payload

| Feld | Pflicht | Hinweise |
| - | - | - |
| `taskId` | statt `answer` + `citations` | Ein abgeschlossener Antwort-Task von Ihnen; siehe oben. |
| `answer` | ja, außer bei `taskId` | Ursprüngliches Antwort-Markdown, 1–200.000 Zeichen. Nicht verändern; jeder Bereich ist ein UTF-16-Offset in genau diesem Text. |
| `citations[]` | ja, außer bei `taskId` | 1–100 Quellen, höchstens 10 URLs von Diskussionsthreads. |
| `citations[].url` | ja | HTTP(S)-URL, höchstens 2.048 Zeichen. |
| `citations[].body` | nein | Quell-Markdown, höchstens 300.000 Zeichen pro Quelle; der gesamte Anfrage-Body höchstens 1 MiB. Ein mitgelieferter Body wird unverändert analysiert und nie durch einen aktuellen Abruf ersetzt. Ohne Body rufen wir die Seite ab; eine nicht lesbare Seite wird bei dieser Quelle mit `error` gemeldet. |
| `citations[].kind` | nein | `inline` oder `panel`; wird aus den Links der Antwort erkannt, wenn es fehlt. |
| `prompt` | nein | Ursprüngliche Frage. Aus Kompatibilität mit bestehenden Integrationen beibehalten; wird im Ergebnis nicht zurückgegeben. |
| `engine` | nein | Die KI-Engine, die die Antwort erzeugt hat. Gleicher Kompatibilitätskontext, wird nicht zurückgegeben. |
| `brand` | nein | Ihr Markenname. Gleicher Kompatibilitätskontext, wird nicht zurückgegeben. |
| `competitors[]` | nein | Bis zu 25 Wettbewerbernamen. Gleicher Kompatibilitätskontext, wird nicht zurückgegeben. |
| `country` | nein | Land für den Quellenabruf, Standard `US`. |

<Warning>
  Die Option `analysis` ist entfallen.
  Frühere Versionen akzeptierten `analysis: {version: 1, …}`. Insights sind jetzt Teil jedes Ergebnisses, daher wird
  dieses Feld mit `400` abgelehnt statt ignoriert. Entfernen Sie es aus bestehenden Integrationen. Vorhandene
  Task-Inhalte bleiben lesbar; gespeicherte Datensätze werden nicht migriert.
</Warning>

## Ergebnis

```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`

Die eingereichte Antwort, unverändert. `answerRanges` sind Offsets in genau diesem String: JavaScript-UTF-16-Codeeinheiten,
`start` inklusive, `end` exklusive. Schneiden Sie ihn unverändert aus, mit `answer.slice(start, end)`, statt den Text
neu aufzuteilen. Jeder Bereich bezeichnet eine vollständige Sinneinheit Ihrer Antwort: einen Satz, einen Listenpunkt
oder eine Tabellenzelle. Seine Grenzen beziehen sich auf den Originaltext.

### `sources[]`: ein Eintrag pro gesendeter Quelle

* `id`: undurchsichtige Kennung, eindeutig im Ergebnis.
* `url`: die von Ihnen angegebene Quell-URL.
* `paragraphs[]`: die im Ergebnis enthaltenen Absätze dieser Seite. Jeder hat eine `id` (im gesamten Ergebnis
  eindeutig) und den `text` des Absatzes. Ein Absatz kann auch ohne Verknüpfung enthalten sein.
* `error`: nur vorhanden, wenn die Seite nicht gelesen werden konnte. `paragraphs` ist dann leer, und der String nennt
  kurz den Grund für diese Quelle.

### `links[]`: eine Beziehung pro Absatz

* `paragraphId`: der Absatz, um den es in dieser Verknüpfung geht. Er zeigt immer auf einen Absatz, der in `sources[]` existiert.
* `answerRanges[]`: die Teile der Antwort, denen dieser Absatz entspricht, als `start`/`end`-Paare in denselben
  UTF-16-Offsets. Eine Verknüpfung kann mehrere Bereiche haben; derselbe Antworttext wiederholt sich nicht zwischen
  ihnen. Jeder Bereich ist eine vollständige Antworteinheit (Satz, Listenpunkt oder Tabellenzelle).
* `explanation`: ein kurzer Satz, der die Entsprechung beschreibt, also was der Absatz über diesen Teil der Antwort aussagt.

### `insights[]`

Kurze Zusammenfassungen dessen, was die Verknüpfungen dieses Ergebnisses zusammen ergeben. `linkIds` nennt die
Verknüpfungen, aus denen jede Zusammenfassung gebildet wurde, und kann nur Verknüpfungen nennen, die in `links[]`
vorkommen: Ein Insight behauptet nie eine Beziehung, die die Antwort nicht enthält. Ohne Verknüpfung gibt es nichts zusammenzufassen.

## Das Ergebnis richtig lesen

* **Keine Verknüpfung ist kein Urteil.** Ein Absatz ohne Verknüpfung hat schlicht keinem Antwortbereich entsprochen,
  und ein Antwortteil ohne Bereich bedeutet, dass kein Absatz mit ihm verknüpft wurde. Beides besagt nicht, dass die
  Seite irrelevant, ungenutzt oder unzuverlässig ist.
* **Eine ungelesene Seite bleibt ungewiss.** Ist `sources[].error` gesetzt, wurde diese Quelle von der Analyse
  ausgeschlossen; werten Sie fehlende Verknüpfungen nicht als negatives Ergebnis. Versuchen Sie es erneut oder liefern
  Sie ihren `body`, wenn sie wichtig ist.
* **Entsprechung, nicht Kausalität.** Das Ergebnis beschreibt, wie eine vorhandene Antwort und ein vorhandener
  Seitentext nachträglich zusammenpassen. Es misst keinen Einfluss auf die Generierung, ordnet Seiten nicht
  gegeneinander, bewertet die Seite nicht und sagt nicht, wie die Antwort entstanden ist.
* **Ids sind intern.** Speichern Sie `p…`/`l…`-Kennungen nicht als stabile Schlüssel über Läufe hinweg; sie gelten nur
  innerhalb eines Ergebnisses.

## Ausführung und Grenzen

* **Größe ist kein Fehlergrund.** Alles, was der Anfragevertrag akzeptiert, also eine `answer` mit bis zu 200.000
  Zeichen und bis zu 100 Quellen, wird analysiert. Lange Antworten, große Quellsätze und sehr lange Seiten werden durch
  Aufteilen der Arbeit bewältigt, nicht durch Ablehnen des Tasks.
* **Die Tiefe richtet sich nach der Antwort, nicht nach der Seite.** Eine lange Seite erzeugt nicht mehr Verknüpfungen,
  als die Antwort tragen kann: Die Analyse konzentriert sich auf die Passagen, die der Antwort am wahrscheinlichsten
  entsprechen, und jede Quelle mit einer Entsprechung ist vertreten. Bei einer großen Seite oder einer, die dieselbe
  Aussage in Navigation, Listen und Bewertungen wiederholt, erhalten Sie die stärksten Passagen statt jedes Vorkommens.
* **Markup ist kein Beleg.** Sitemaps, Linkverzeichnisse und Bildergalerien liefern keine Verknüpfungen; eine Seite, die
  nur daraus besteht, wird ohne Absätze gemeldet statt mit erfundenen Entsprechungen.
* Eine nicht lesbare Quelle wird in `sources[].error` gemeldet, ohne den Task scheitern zu lassen, wenn eine andere
  Quelle lesbar ist. Der Task scheitert, wenn keine Quelle gelesen werden konnte, bei einem Analysefehler, einem
  Timeout oder einem Konfigurationsfehler des Dienstes.
* Anfragen werden wie der Rest der API nach Nutzung abgerechnet. Die Antwort beim Einreichen zeigt die vorläufige
  Credit-Reservierung; die endgültige Belastung wird verrechnet, wenn der Task einen Endzustand erreicht.
