Skip to main content
Compare a completed AI answer with its cited sources. The result is a compact map: the paragraphs of each source page that the result includes, the parts of the answer they correspond to, an explanation for every link, and short summaries built from those links. This is post-hoc correspondence analysis of an existing answer — not proof that a source caused the model to generate a sentence, and not a score of a page’s quality. Treat it as evidence to inspect, not a verdict.
Poll GET /v1/async/task/:id, or supply webhook.url when submitting; the task reports taskType: "SOURCE_INFLUENCE". Do not submit this analysis through POST /v1/async/task; use the dedicated endpoint. POST /v1/research and the CITATION_ATTRIBUTION task type remain accepted as deprecated aliases.

Analyze a task you already ran

If the answer came from this API, send its task id instead of copying the answer and citations out of the result:
The task must be one of yours, COMPLETED, and still readable through GET /v1/async/task/:id. Its answer Markdown (text when the engine returned no Markdown) becomes answer, and its cited URLs become citations in the engine’s order: the first 100, with at most 10 discussion threads. Product and video card placeholders (googleusercontent.com links) and Google search links are skipped, since they have no page to read. The task’s prompt and country and its engine are used unless you send them. Sending taskId together with answer or citations is rejected with 400, and so is a task that is unfinished or has no answer text or cited URL. An unknown or expired task id returns 404.

Analyze every answer as you collect it

Add include.sourceInfluence: true to a collection request, and the analysis runs on the answer as soon as it is collected. It works with the answer engines (CHATGPT, GEMINI, PERPLEXITY, GOOGLE_AIO, GOOGLE_AIMODE, NAVER_AI_BRIEF, NAVER_AI_TAB, BING_SEARCH, BING_COPILOT), in single tasks, task batches, grids and POST /v1/batches.
The analysis reads the answer and its cited URLs the same way taskId does above. The answer’s result then carries response.sourceInfluence: the analysis task exactly as GET /v1/async/task/:id returns it, with task, credits and response or error.
  • Webhook: sent once, after the analysis finishes, with the answer and the analysis together.
  • Polling: the answer task is COMPLETED as soon as the answer is ready. Keep polling until response.sourceInfluence.task.status is COMPLETED or FAILED.
  • Batches complete when every answer and its analysis have finished.
  • No analysis: when the answer cites no URL to read, or your credits or the key’s daily limit cannot cover the analysis hold, response.sourceInfluence is { "error": "…" } and the answer is delivered right away.
  • Billing: the analysis is charged on its own, by usage like any Source Influence task. The answer’s charge does not change. A key limited to certain task types must also allow SOURCE_INFLUENCE.

Payload

The request rejects analysis with 400. Insights are included in every result.

Result

answer

The answer you submitted, unchanged. answerRanges are offsets into this exact string: JavaScript UTF-16 code units, start inclusive, end exclusive. Slice it as-is — answer.slice(start, end) — instead of re-splitting the text. Every range identifies a whole semantic unit of your answer: a sentence, list item or table cell. Its boundaries refer to the original text.

sources[] — one entry per citation you sent

  • id — opaque identifier, unique within the result.
  • url — the citation URL you supplied.
  • paragraphs[] — the paragraphs of that page included in the result. Each has an id (globally unique across the whole result) and the text of the paragraph. A paragraph can be included with no link at all.
  • error — present only when the page could not be read. paragraphs is then empty, and the string is a short reason for that source.
  • paragraphId — the paragraph this link is about. It always points at a paragraph that exists in sources[].
  • answerRanges[] — the parts of the answer this paragraph corresponds to, as start/end pairs in the same UTF-16 offsets as above. A link may carry several ranges; the same answer text is not repeated across them. Each range is a whole answer unit (sentence, list item or table cell).
  • explanation — a short sentence describing the correspondence: what the paragraph states about that part of the answer.

insights[]

Short summaries of what the links in this result add up to. linkIds names the links each summary was built from, and it can only name links that appear in links[] — an insight never claims a relationship the response does not contain. When there is no link, there is nothing for an insight to summarize.

Reading the result correctly

  • No link is not a verdict. A paragraph without a link simply did not match an answer range, and an answer part with no range means no paragraph was linked to it. Neither says the page is irrelevant, unused or untrustworthy.
  • An unread page stays uncertain. When sources[].error is set, that citation was excluded from the analysis; do not treat its lack of links as a negative finding. Retry it or supply its body if it matters.
  • Correspondence, not causation. The result describes how an existing answer and existing page text line up after the fact. It does not measure generation influence, rank pages against each other, score the page, or report how the answer was produced.
  • Ids are internal. Do not persist p…/l… identifiers as stable keys across runs; they are scoped to a single result.

Execution and limits

  • Size is not a failure mode. Anything the request contract accepts — an answer up to 200,000 characters with up to 100 citations — is analyzed. Long answers, large source sets and very long pages are handled by splitting the work, not by rejecting the task.
  • Depth scales with the answer, not the page. A long page does not produce more links than the answer can support: the analysis concentrates on the passages most likely to correspond to the answer, and every source that shows a correspondence is represented. On a large page, or on a page that repeats the same statement in navigation, listings and reviews, expect the strongest passages rather than every occurrence.
  • Markup is not evidence. Sitemaps, link indexes and image galleries contribute no links; a page made only of those is reported with no paragraphs rather than with invented correspondence.
  • A source that could not be read is reported in sources[].error without failing the task if another source is readable. The task fails when no source could be read, on an analysis failure, on a timeout, or on a service configuration error.
  • Requests are metered by usage, like the rest of the API. The submit response shows the temporary credit hold; the final charge is settled when the task reaches a terminal state.