---
title: "Group AI-visibility audit recommendations by action"
method: GET
path: "/v1/trust/audit/recommendations"
tags: ["Trust"]
---

# Group AI-visibility audit recommendations by action

`GET /v1/trust/audit/recommendations`

## Request

- Base URL: `https://api.prod.keyban.io`
- URL: `https://api.prod.keyban.io/v1/trust/audit/recommendations`
- Auth: API key in header `X-Api-Key`

Group the recommendations of the latest audit of every active tracked product by action, so the catalogue reads as a to-do list: each action lists the products whose page still needs it, highest priority first, then most impacted first. Recommendations are re-derived from the technical checks and answerability signals of each latest snapshot, without the per-product cap of 5 that `details.recommendations` carries on the subject endpoints — a product appears under every action its page fails, not only under its 5 most urgent. `auditedSubjects` counts the active products with at least one audit: the population each `subjects` list is drawn from.

## Query parameters

- `applicationId` string, uuid, required

## Response `200`

- AuditRecommendationsDto
  - `data` object[], required: Every action flagged by the latest audit of at least one active tracked product, highest priority first, then most impacted products first. Not paginated: the rule catalogue bounds the list.
    - `priority` 'high' | 'medium' | 'low', required: Urgency of the recommended fix.
    - `action` string, required: Human-readable action to take.
    - `subjects` object[], required: Active tracked products whose latest audit flagged this action, sorted by product name.
      - `id` string, uuid, required: UUID of the audit subject (the tracked product), distinct from the UUID of the passport it wraps.
      - `passportId` string, uuid, required: UUID of the DPP passport this subject tracks. A passport is tracked by at most one subject.
      - `productName` string, required: Commercial name of the tracked product, read live from the passport (not frozen at recruitment, unlike `category`).
      - `webPageUrl` string, 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.
      - `category` string, 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.
      - `geo` integer, required: Composite GEO score of the latest snapshot of the product, the audit that flagged this recommendation.
  - `auditedSubjects` integer, required: Number of active tracked products with at least one audit — the population each `subjects` list is drawn from.

---

[API](https://skmtc.dev/keyban/apis/keyban-rest-apis.md) · [All operations](https://skmtc.dev/keyban/apis/keyban-rest-apis/llms.txt) · [OpenAPI document](https://skmtc.dev/keyban/apis/keyban-rest-apis/revisions/0bb79a1da961?raw)
