# Retrieve PDP scores by id

`GET /v1/pdps/id/{id}`

Returns the current scores and processing state for a PDP submitted
via [Submit a PDP by id](/api/product-details/upsertPdpById).
Poll until `status` reaches a terminal `COMPLETED` or `ERROR`.

During a rescore the previous scores remain visible alongside
`status: PROCESSING` and the prior `scored_at` timestamp, so clients
can keep showing the last known result while a new one is computed.

Use the optional `retailer` query parameter to disambiguate the same id
submitted under different retailers. The `score_url` returned by the PUT
already includes it.

## Parameters

| Name | In | Required | Type | Description |
| --- | --- | --- | --- | --- |
| `retailer` | query | no | string | Retailer the id was submitted under. Disambiguates the same id across retailers. Defaults to `amazon_us`.  |

## Responses

### 200 — PDP scores

**application/json**

- **object** — PDP scores and processing status. When `status` is `"PROCESSING"` or
`"ERROR"`, score fields may be absent or reflect the previous scored
state (if any). When `status` is `"COMPLETED"`, all fields are populated
and reflect the most recent scoring run.

  - `id` (string, required) — The caller-supplied identifier this PDP was submitted under.
  - `retailer` (string, required) — Retailer the PDP was submitted under.
  - `pdp_id` (string, required)
  - `status` (enum: "PROCESSING" | "COMPLETED" | "ERROR", required)
  - `error_code` (any) — Machine-readable error code when `status` is `"ERROR"`; `null`
otherwise.

  - `name` (any)
  - `category` (any) — Human-readable category name.
  - `pdp_score` (any) — Aggregate listing score (0–100).
  - `listing_score_at_ingest` (any) — The listing score captured when the PDP was first scored (baseline).
  - `score_change` (any) — Change in listing score since ingest (`pdp_score` minus
`listing_score_at_ingest`).

  - `vizit_certified` (any) — Whether the listing score meets the Vizit Certified bar: `true`
when `pdp_score` is 80 or above. `null` until scored.

  - `carousel_score` (any) — Average vizit_score across the carousel images.
  - `hero` (any)
  - `carousel_images` (array<object>)
    - items:
      - **object**
        - `image_id` (string, required)
        - `image_url` (any) — The submitted source URL, echoed back. `null` for images created
before this field existed or via non-Public-API paths.

        - `position` (integer, required) — 1-based position within the carousel
        - `vizit_score` (any)
        - `vizit_certified` (any) — Whether the image's vizit_score meets the Vizit Certified bar:
`true` when `vizit_score` is 80 or above. `null` until scored.

        - `classification` (any)
  - `asset_mix` (any)
  - `images_matching_ideal_mix` (any) — Number of images counting toward the category's ideal content mix
targets. Capped per asset type, so extra images of one type do not
offset a missing type. `null` when the category has no ideal mix
or the PDP has not been scored yet.

  - `is_ideal_content_mix` (any) — Whether the PDP's content mix meets or exceeds every target in
`asset_mix.ideal_by_classification`. `true` when the category has
no ideal mix to compare against. `null` while the PDP is still
processing.

  - `score_penalty` (any) — Whether the listing score was reduced because too few of the
listing's images score highly (see `high_scoring_asset_count`).
`null` until scored.

  - `image_count_penalty` (any) — Whether the listing score was reduced because the carousel carries
fewer images than recommended. `null` until scored.
The CSV export's column of the same name carries the
underlying score multiplier instead of this true/false flag.

  - `image_mix_penalty` (any) — Whether the listing score was reduced because the carousel images
are visually too similar to each other. `null` until scored.
The CSV export's column of the same name carries the
underlying score multiplier instead of this true/false flag.

  - `image_order_penalty` (any) — Whether the listing score was reduced because the carousel images
are not ordered strongest-first. `null` until scored.
The CSV export's column of the same name carries the
underlying score multiplier instead of this true/false flag.

  - `high_scoring_asset_count` (any) — Number of the listing's images that meet the high-score bar.
`null` until scored.

  - `scored_at` (any)

### 400 — Validation error. `error_code` values:
  - INVALID_ID — id is empty or longer than 512 characters
  - INVALID_RETAILER — retailer is not in retailer_regions


**application/json**

- **object** — Standardized error format for all `/v1/*` endpoints. `error_code` is a
stable SCREAMING_SNAKE_CASE identifier clients can switch on.

  - `detail` (string) — Human-readable error message
  - `status_code` (integer) — HTTP status code
  - `error_code` (string) — Stable machine-readable error code
  - `request_id` (any) — Request identifier for correlation
  - `extra` (any) — Endpoint-specific additional context. For example,
IMAGE_DOWNLOAD_FAILED populates extra.failed_urls with per-URL
failure reasons so clients can triage bulk submissions.

  - `timestamp` (string)

### 401 — Missing or invalid Bearer token

### 404 — PDP not found for this id in the caller's organization

**application/json**

- **object** — Standardized error format for all `/v1/*` endpoints. `error_code` is a
stable SCREAMING_SNAKE_CASE identifier clients can switch on.

  - `detail` (string) — Human-readable error message
  - `status_code` (integer) — HTTP status code
  - `error_code` (string) — Stable machine-readable error code
  - `request_id` (any) — Request identifier for correlation
  - `extra` (any) — Endpoint-specific additional context. For example,
IMAGE_DOWNLOAD_FAILED populates extra.failed_urls with per-URL
failure reasons so clients can triage bulk submissions.

  - `timestamp` (string)

### 422 — Request validation failed (error_code VALIDATION_ERROR)

**application/json**

- **object** — Standardized error format for all `/v1/*` endpoints. `error_code` is a
stable SCREAMING_SNAKE_CASE identifier clients can switch on.

  - `detail` (string) — Human-readable error message
  - `status_code` (integer) — HTTP status code
  - `error_code` (string) — Stable machine-readable error code
  - `request_id` (any) — Request identifier for correlation
  - `extra` (any) — Endpoint-specific additional context. For example,
IMAGE_DOWNLOAD_FAILED populates extra.failed_urls with per-URL
failure reasons so clients can triage bulk submissions.

  - `timestamp` (string)
