---
title: "Get the compact agent report context"
method: GET
path: "/api/v1/runs/{runId}/report"
tags: ["reports"]
---

# Get the compact agent report context

`GET /api/v1/runs/{runId}/report`

## Request

- Base URL: `https://index365.co`
- URL: `https://index365.co/api/v1/runs/{runId}/report`
- Auth: HTTP bearer

Bounded orientation payload to read FIRST after a run completes; it is sized to fit agent context budgets. Discriminate on `product`: AI-Readiness serves foundation-file state, Marketing Signal serves the six category scores and its coverage line, and Website Security serves public-surface scope, pillars, and deterministic checks. Per-check detail is not in this payload by design; download the run report for it.

## Path parameters

- `runId` string, uuid, required

## Response `200`

Product-aware report context.

- union
  - object: Agent result contract v2 report context. Bounded orientation payload to read before paginating findings.
    - `schemaVersion` integer, required
    - `product` 'ai_readiness', required
    - `runId` string, uuid, required
    - `projectId` string, uuid, nullable, required
    - `url` string, uri, required
    - `score` integer, required
    - `scoreStatus` 'unverified': Present when source-only page evidence cannot support a score claim.
    - `scoreLabel` string, required
    - `execSummary` string, required
    - `severityCounts` object, required
      - `critical` integer, required
      - `high` integer, required
      - `medium` integer, required
      - `low` integer, required
      - `info` integer, required
    - `findingsTotal` integer, required
    - `topFindings` object[], required
      - `findingId` string, required
      - `severity` 'critical' | 'high' | 'medium' | 'low' | 'info', required
      - `category` 'discoverability' | 'structured_data' | 'metadata' | 'content_structure' | 'accessibility' | 'answerability' | 'agent_operability' | 'performance' | 'security' | 'general' | 'findability' | 'measurement' | 'conversion_path' | 'offer_clarity' | 'trust_proof' | 'schema_metadata' | 'social_preview' | 'performance_ux' | 'consent_privacy_signal' | 'connected_account', required
      - `title` string, required
      - `remediation` string, required
      - `affectedUrls` string[], required
    - `foundation` object, required
      - `sitemap` object, required
        - `present` boolean, required
        - `notes` string, required
      - `robotsTxt` object, required
        - `present` boolean, required
        - `notes` string, required
      - `llmsTxt` object, required
        - `present` boolean, required
        - `notes` string, required
    - `checks` object: Structural check ledger for runs created after the ledger shipped. pass/fail/info/unverified summarize rows.
      - `pass` integer, required
      - `fail` integer, required
      - `info` integer, required
      - `unverified` integer, required
      - `rows` object[], required
        - `id` string, required
        - `label` string, required
        - `category` 'discoverability' | 'structured_data' | 'metadata' | 'content_structure' | 'accessibility' | 'answerability' | 'agent_operability' | 'performance' | 'security' | 'general' | 'findability' | 'measurement' | 'conversion_path' | 'offer_clarity' | 'trust_proof' | 'schema_metadata' | 'social_preview' | 'performance_ux' | 'consent_privacy_signal' | 'connected_account', required
        - `status` 'pass' | 'fail' | 'info' | 'unverified', required
        - `detail` string, required
    - `pagesCrawled` integer, required
    - `scanMode` string, nullable, required
    - `model` string, nullable, required
    - `costUsd` number, required
    - `createdAt` string, date-time, required
    - `completedAt` string, date-time, nullable, required
    - `humanUrl` string, required: Human-readable dashboard view of this exact run.
  - object: Historical Marketing Signal report context (product=marketing_signal), available only by explicit run id.
    - `schemaVersion` integer, required
    - `product` 'marketing_signal', required
    - `runId` string, uuid, required
    - `projectId` string, uuid, nullable, required
    - `url` string, uri, required
    - `score` integer, required
    - `scoreStatus` 'unverified': Present when any Marketing funnel stage needs rendered verification and the numeric fallback is non-authoritative.
    - `scoreLabel` string, required
    - `execSummary` string, required
    - `severityCounts` object, required
      - `critical` integer, required
      - `high` integer, required
      - `medium` integer, required
      - `low` integer, required
      - `info` integer, required
    - `findingsTotal` integer, required
    - `stageScores` object[], required: The five funnel stages (find/trust/act/measure/improve), each with a canonical 0-100 score, presentation status, and check tallies. Unverified preserves the numeric fallback without claiming verified reporting. The overall score blends stages at weights 20/20/25/25/10.
      - `stage` 'find' | 'trust' | 'act' | 'measure' | 'improve', required: Marketing Signal funnel stage (Marketing Signal findings only).
      - `status` 'scored' | 'unverified', required: unverified means public HTML lacks enough source evidence for this funnel stage, including runtime analytics, metadata, conversion, and trust evidence on a client-rendered page.
      - `score` integer, required
      - `checks_pass` integer, required
      - `checks_fail` integer, required
      - `finding_count` integer, required
      - `top_finding` string, nullable, required
      - `confidence` 'high' | 'medium' | 'low', required: measure is capped at medium under public_only coverage: HTML proves a tag exists, never that the account behind it is configured correctly.
    - `sourceCoverage` 'public_only' | 'connected', required: Evidence base for this run. public_only = HTML-visible public signals.
    - `connectedSources` object[], required
      - `provider` string, required
      - `account_label` string, required
      - `last_synced_at` string, date-time, nullable, required
      - `freshness` 'fresh' | 'stale' | 'error', required
    - `templatesAudited` integer, required
    - `topFindings` object[], required
      - `findingId` string, required
      - `severity` 'critical' | 'high' | 'medium' | 'low' | 'info', required
      - `category` 'discoverability' | 'structured_data' | 'metadata' | 'content_structure' | 'accessibility' | 'answerability' | 'agent_operability' | 'performance' | 'security' | 'general' | 'findability' | 'measurement' | 'conversion_path' | 'offer_clarity' | 'trust_proof' | 'schema_metadata' | 'social_preview' | 'performance_ux' | 'consent_privacy_signal' | 'connected_account', required
      - `stage` 'find' | 'trust' | 'act' | 'measure' | 'improve', required: Marketing Signal funnel stage (Marketing Signal findings only).
      - `title` string, required
      - `remediation` string, required
      - `affectedUrls` string[], required
    - `checks` object: Marketing check ledger summary (pass/fail/info/unverified) + rows.
      - `pass` integer, required
      - `fail` integer, required
      - `info` integer, required
      - `unverified` integer, required
      - `rows` object[], required
        - `id` string, required
        - `label` string, required
        - `category` 'discoverability' | 'structured_data' | 'metadata' | 'content_structure' | 'accessibility' | 'answerability' | 'agent_operability' | 'performance' | 'security' | 'general' | 'findability' | 'measurement' | 'conversion_path' | 'offer_clarity' | 'trust_proof' | 'schema_metadata' | 'social_preview' | 'performance_ux' | 'consent_privacy_signal' | 'connected_account', required
        - `status` 'pass' | 'fail' | 'info' | 'unverified', required
        - `detail` string, required
    - `pagesCrawled` integer, required
    - `scanMode` string, nullable, required
    - `model` string, nullable, required
    - `costUsd` number, required
    - `createdAt` string, date-time, required
    - `completedAt` string, date-time, nullable, required
    - `humanUrl` string, required: Human-readable Marketing dashboard view of this exact run.
  - object: Marketing Signal report context. Six customer categories each scored 0-100, a stated coverage line, impact-ranked upside per category, and up to five evidence-backed action bundles. The score is derived from the checks the run graded, weighted by graded-check count, and is the same number the dashboard shows.
    - `schemaVersion` integer, required
    - `product` 'marketing_signal_v2', required
    - `runId` string, uuid, required
    - `projectId` string, uuid, nullable, required
    - `url` string, uri, required
    - `score` integer, nullable, required: Null when nothing on the run graded. Derived from the graded checks, weighted by graded-check count, so it always equals the roll-up of `categories`.
    - `band` 'Weak' | 'Fair' | 'Good' | 'Excellent' | 'null', nullable, required: Score band. Null exactly when score is null.
    - `scoreLabel` string, required
    - `execSummary` string, required
    - `severityCounts` object, required
      - `critical` integer, required
      - `high` integer, required
      - `medium` integer, required
      - `low` integer, required
      - `info` integer, required
    - `findingsTotal` integer, required
    - `topFindings` object[], required
      - `findingId` string, required
      - `severity` 'critical' | 'high' | 'medium' | 'low' | 'info', required
      - `category` 'discoverability' | 'structured_data' | 'metadata' | 'content_structure' | 'accessibility' | 'answerability' | 'agent_operability' | 'performance' | 'security' | 'general' | 'findability' | 'measurement' | 'conversion_path' | 'offer_clarity' | 'trust_proof' | 'schema_metadata' | 'social_preview' | 'performance_ux' | 'consent_privacy_signal' | 'connected_account', required
      - `marketingCategory` object: The report category this finding sits under. Separate from `category`, which is the shared cross-product taxonomy.
        - `key` 'seo' | 'content' | 'aeo' | 'analytics_tracking' | 'conversion' | 'trust_proof', required
        - `label` string, required
      - `title` string, required
      - `remediation` string, required
      - `affectedUrls` string[], required
    - `coverageLine` string, required: What the run actually graded. Both counts include only checks that could move a score; opportunities are excluded from both and reported separately.
    - `gradedCheckCount` integer, required
    - `applicableCheckCount` integer, required
    - `categories` object[], required: The six customer categories, in stable order. A category that graded nothing reports a null score rather than a zero.
      - `key` 'seo' | 'content' | 'aeo' | 'analytics_tracking' | 'conversion' | 'trust_proof', required
      - `label` string, required
      - `subtitle` string
      - `score` integer, nullable, required
      - `band` 'Weak' | 'Fair' | 'Good' | 'Excellent' | 'null', nullable, required
      - `passCount` integer, required
      - `failCount` integer, required
      - `evaluatedCount` integer, required: Checks that produced a pass or fail here. Also this category's weight.
      - `eligibleCount` integer, required
      - `pointsAvailable` integer, required: Headline points a perfect score in this category would still add.
    - `categoryScoreLine` string, required
    - `opportunities` object[], required: Emerging-standard upside. Never scored in either direction, so it can raise the ceiling but never damage the number.
      - `id` string, required
      - `title` string, required
      - `whyItMatters` string, required
      - `howToFix` string, required
    - `restated` boolean, required: True when the derived headline differs from the one this run stored, which happens on runs scored before the corrected weighting.
    - `restatementNote` string
    - `legacyStoredScore` integer, nullable, required: The headline this run stored, for reconciling against an older record. Never present this as the current score.
    - `metrics` object[], required: Bounded non-scoring measurements with explicit capture scope.
      - `id` string, required
      - `label` string, required
      - `value` union, required
        - string
        - number
      - `evidenceMode` 'local_source' | 'production_source' | 'rendered_when_it_ships', required
      - `scope` string, required
      - `evidence` string, required
    - `authentication` union, required
      - object
        - `label` 'Authentication', required
        - `status` 'partial', required
        - `summary` object, required: Additive, non-scoring authentication provenance for the exact audited URL. Missing lanes are disclosed, not treated as completed.
          - `capturedAt` string, date-time, required
          - `targetUrl` string, uri, required
          - `scope` string, required
          - `status` 'partial', required
          - `evidence` union[], required
            - union
              - …
      - object
        - `label` 'Authentication', required
        - `status` 'not_available', required
        - `summary` unknown, required
    - `topActions` object[], required
      - `id` string, required
      - `checkIds` string[], required
      - `severity` 'critical' | 'high' | 'medium' | 'low' | 'info', required
      - `title` string, required
      - `evidenceMode` 'local_source' | 'production_source' | 'rendered_when_it_ships', required
      - `applicability` object, required
        - `profile` string, required
        - `applicable` boolean, required
        - `reason` string, required
      - `exactEvidence` object[], required
        - `kind` 'text' | 'heading' | 'section' | 'list' | 'anchor' | 'cta' | 'form', required
        - `value` string, required
        - `destination` string, uri
      - `remediation` string, required
      - `severityRationale` string, required
    - `scanMode` string, nullable, required
    - `model` string, nullable, required
    - `costUsd` number, required
    - `createdAt` string, date-time, required
    - `completedAt` string, date-time, nullable, required
    - `humanUrl` string, required: Human-readable dashboard view of this exact run.
  - object: Website Security report context (product=website_security). Includes the public-surface scope disclaimer, pillar rollup, deterministic check ledger, and bounded top findings.
    - `schemaVersion` integer, required
    - `product` 'website_security', required
    - `runId` string, uuid, required
    - `projectId` string, uuid, nullable, required
    - `url` string, uri, required
    - `score` integer, required
    - `scoreStatus` 'unverified': Present when source-only evidence cannot support a numeric Website Security score.
    - `scoreLabel` string, required
    - `execSummary` string, required
    - `severityCounts` object, required
      - `critical` integer, required
      - `high` integer, required
      - `medium` integer, required
      - `low` integer, required
      - `info` integer, required
    - `findingsTotal` integer, required
    - `topFindings` object[], required
      - `findingId` string, required
      - `severity` 'critical' | 'high' | 'medium' | 'low' | 'info', required
      - `category` 'security', required
      - `pillar` 'browser_defenses' | 'transport_trust' | 'dns_email_trust' | 'cookies_sessions' | 'exposure_reputation', required
      - `title` string, required
      - `remediation` string, required
      - `affectedUrls` string[], required
    - `scope` object, required
      - `label` string, required
      - `disclaimer` string, required
      - `pagesScanned` integer, required
    - `pillars` object[], required
      - `key` 'browser_defenses' | 'transport_trust' | 'dns_email_trust' | 'cookies_sessions' | 'exposure_reputation', required
      - `label` string, required
      - `score` integer, nullable, required: Null when the pillar has only unverified runtime-dependent checks.
      - `weight` number, required
      - `pass` integer, required
      - `fail` integer, required
    - `checks` object[], required
      - `id` string, required
      - `label` string, required
      - `pillar` 'browser_defenses' | 'transport_trust' | 'dns_email_trust' | 'cookies_sessions' | 'exposure_reputation', required
      - `status` 'pass' | 'fail' | 'info' | 'unverified', required
      - `severity` 'critical' | 'high' | 'medium' | 'low' | 'info', required
      - `evidence` string, required
      - `recommendation` string, required
    - `tls` object
      - `valid` boolean, required
      - `issuer` string
      - `subject` string
      - `validTo` string, date-time
      - `daysUntilExpiry` number
      - `error` string
    - `dns` object
      - `hasMx` boolean, required
      - `hasSpf` boolean, required
      - `hasDmarc` boolean, required
      - `hasCaa` boolean, required
    - `pagesScanned` integer, required
    - `scanMode` string, nullable, required
    - `model` string, nullable, required
    - `costUsd` number, required
    - `createdAt` string, date-time, required
    - `completedAt` string, date-time, nullable, required
    - `humanUrl` string, required: Human-readable Security dashboard view of this exact run.
  - object: Repository report context (product=repo_scan), served for a run created by POST /api/v1/runs/analyze-repo. Carries local_repository provenance and the categories the repository evidence actually graded. It has NO score, band, or scoreLabel field: source cannot prove response headers, DNS, TLS, redirects, or a rendered page, so a headline Marketing Signal score would be unfounded. Escalate to a live scan for the published experience.
    - `schemaVersion` integer, required
    - `product` 'repo_scan', required
    - `surface` string, required: Customer-facing name of this artifact, e.g. "Tracking & Wiring Check". Never "Marketing Signal".
    - `runId` string, uuid, required
    - `projectId` string, uuid, nullable, required
    - `provenance` object, required
      - `kind` 'local_repository', required
      - `statement` string, required
      - `scoredAgainstLiveDomain` false, required: Always false. A repository run is never evidence about the live registered domain; the server cannot prove submitted bytes belong to it.
      - `gitRemoteObserved` string, nullable: Observed, never treated as proof of ownership.
      - `headSha` string, nullable
    - `categories` object[], required: Only categories the repository evidence actually graded. Ungraded categories are ABSENT, never present with a null or zero score.
      - `key` string, required
      - `label` string, required
      - `score` integer, required
    - `gradedCheckCount` integer, required
    - `checks` object[], required
    - `notEvaluatedReason` string, required: What a repository scan cannot show, stated rather than left as silence.
    - `nextStep` string, required

## Other responses

- `401`: Missing/unknown/revoked API key.
- `403`: Key lacks the required scope (error.code=insufficient_scope).
- `404`: Resource not found in this organization.
- `409`: run_not_completed.
- `429`: Rate limit exceeded (60 req/min per key). Honor Retry-After.

---

[API](https://skmtc.dev/index365/apis/index365-api.md) · [All operations](https://skmtc.dev/index365/apis/index365-api/llms.txt) · [OpenAPI document](https://skmtc.dev/index365/apis/index365-api/revisions/87dd7b85edcb?raw)
