# Retrieve PDP scores by ASIN

`GET /v1/pdps/asin/{asin}`

Returns the current scores and processing state for a PDP submitted
via [Submit a PDP by ASIN](/api/product-details/upsertPdpByAsin).
Poll until `status` moves from `processing` to `scored`.

During a refresh, previously computed 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 `region` query parameter to disambiguate between
regional storefronts when the same ASIN has been ingested under
multiple regions in your organization. The `score_url` returned by
the PUT response already includes this parameter.

## Parameters

| Name | In | Required | Type | Description |
| --- | --- | --- | --- | --- |
| `region` | query | no | string | Amazon storefront region (e.g., `us`, `uk`, `de`, `ca`). Defaults to `us`.  |

## Responses

### 200 — PDP scores

**application/json**

- **object** — PDP scores and processing status for an Amazon ASIN. Mirrors
`PdpScoreResponse` but echoes the identifier as `asin` (with the
`region` it was ingested under) instead of `gtin`.

When `status` is `"processing"` or `"error"`, score fields may be
absent or reflect the previous scored state (if any). When `status`
is `"scored"`, all fields are populated and reflect the most recent
scoring run.

  - `asin` (string, required)
  - `region` (string, required) — Amazon storefront region the PDP was ingested under.
  - `pdp_id` (string, required)
  - `status` (enum: "processing" | "scored" | "error", required)
  - `name` (any)
  - `category` (any) — Human-readable category name (derived from the retailer scrape).
  - `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`).

  - `conversion_ready` (any) — Whether the listing score meets the conversion-readiness bar. `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)
        - `conversion_ready` (any) — Whether the image's vizit_score meets the conversion-readiness bar.
`null` until scored.

        - `classification` (any)
  - `asset_mix` (any)
  - `scored_at` (any)

### 400 — `region` is not a supported Amazon storefront
(`error_code`: `INVALID_REGION`).


**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 — No PDP for this ASIN and region in the caller's organization
(`error_code`: `PDP_NOT_FOUND`).


**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)
