Trust

Get an AI-visibility audit subject

Drill down into a single tracked product: its full snapshot history (chronological) and the raw audit material (per-query ranks, competitors, technical checks, recommendations) of the most recent snapshot.

get/v1/trust/audit/subjects/{id}

Request

  • Base URL: https://api.prod.keyban.io
  • URL: https://api.prod.keyban.io/v1/trust/audit/subjects/{id}
  • Auth: API key in header X-Api-Key

Path parameters

idstring required

Response

idstring uuid required

UUID of the audit subject (the tracked product), distinct from the UUID of the passport it wraps.

passportIdstring uuid required

UUID of the DPP passport this subject tracks. A passport is tracked by at most one subject.

productNamestring required

Commercial name of the tracked product, read live from the passport (not frozen at recruitment, unlike category).

webPageUrlstring nullable required

Merchant product page (PDP) the audits crawl, read live from the passport. Never null in practice — a passport without a parsable URL is not recruited — but nullable to survive a passport edited after recruitment.

categorystring required

Product category the subject was classified under at recruitment time (schemeID:code), or uncategorized when the passport had none. Frozen: later edits to the passport category do not change it. Drives the stratified sampling across the catalogue.

languagestring nullable required

ISO 639-1 code of the language the frozen audit prompts are written in, resolved at baseline from the merchant page (<html lang> cross-checked against the page text, product data as fallback). Null while baseline_pending, or when no signal allowed a decision.

state'baseline_pending' | 'active' | 'archived' required

Lifecycle state: baseline_pending (recruited, T0 audit not captured yet, passport still held back as draft), active (T0 captured, passport live, re-audited weekly), archived (audits stopped, quota slot freed).

recruitedAtstring date-time required

When the product was recruited as an audit subject (at its publish attempt).

deltainteger nullable required

latest.geo minus baseline.geo. Null only when there is no baseline yet — a delta of 0 (no movement since T0) is a real, distinct value.

Example response

{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "passportId": "6ba7b810-9dad-11d1-80b4-00c04fd430c8",
  "productName": "Recycled cotton hoodie",
  "webPageUrl": "https://shop.example/products/recycled-cotton-hoodie",
  "category": "unspsc:53102400",
  "language": "fr",
  "state": "active",
  "recruitedAt": "2026-06-24T10:00:00.000Z",
  "baseline": {
    "auditedAt": "2026-07-01T08:00:00.000Z",
    "geo": 62
  },
  "latest": {
    "auditedAt": "2026-07-01T08:00:00.000Z",
    "geo": 62
  },
  "delta": 8,
  "snapshots": [
    {
      "id": "9a5e8c6e-2b1a-4a3e-8c5a-2f6d1e9b0a3c",
      "kind": "scheduled",
      "visibility": 55,
      "competitive": 40,
      "technicalReadiness": 70,
      "answerability": 58,
      "geo": 61,
      "sources": [
        "firecrawl",
        "exa"
      ],
      "auditedAt": "2026-07-01T08:00:00.000Z"
    }
  ],
  "details": {
    "queries": [
      {
        "text": "Quelle canne à carpe choisir pour débuter, autour de 3,60 m ?",
        "intent": "certification",
        "ranks": {
          "firecrawl": 2,
          "exa": null
        },
        "visibility": 100,
        "competitive": 42,
        "top": [
          {
            "domain": "competitor-brand.example",
            "rank": 1
          }
        ]
      }
    ],
    "competitors": [
      {
        "domain": "competitor-brand.example",
        "bestRank": 1,
        "queries": [
          "meilleur sweat en coton recyclé"
        ]
      }
    ],
    "pageChecks": [
      {
        "id": "has-title",
        "status": "pass"
      }
    ],
    "answerabilitySignals": {
      "hasFaq": true,
      "hasAggregateRating": false
    },
    "recommendations": [
      {
        "priority": "high",
        "action": "Add a meta description tag to the page."
      }
    ]
  }
}

Changes

No recorded changes to this operation across all 1 revision of this API.