---
title: "Product read (JSON-LD)"
method: GET
path: "/p/{category}/{slug}.json"
---

# Product read (JSON-LD)

`GET /p/{category}/{slug}.json`

## Request

- Base URL: `https://productindex.ai`
- URL: `https://productindex.ai/p/{category}/{slug}.json`
- Auth: none required

Returns Schema.org `Product` JSON-LD for a single product. Statically prerendered at build time (one file per product, from static content plus build-time-merged producer enrichments) — this is a read-only, always-200-for-known-slugs endpoint; unknown slugs 404 via normal static-file routing rather than a JSON error body. Response is served with `X-Robots-Tag: noindex`.

## Path parameters

- `category` string, required
- `slug` string, required

## Response `200`

Product JSON-LD.

- ProductJsonLd: Schema.org Product JSON-LD, built per-request from static content plus build-time-merged enrichments. Fields beyond @context/@type/name/category/url/offers/dateModified are conditionally present.
  - `@context` 'https://schema.org'
  - `@type` 'Product'
  - `name` string
  - `model` string
  - `category` string
  - `url` string
  - `brand` object
    - `@type` 'Brand'
    - `name` string
  - `image` string: Present when a non-placeholder image exists.
  - `additionalImages` string[]: Present when producer-submitted images have been approved.
  - `verificationStatus` 'base' | 'producer_enriched' | 'manufacturer_enriched' | 'manufacturer_verified'
  - `enrichmentEndpoint` string
  - `enrichedBy` object[]: Present when at least one verified org contributed an enrichment.
    - `orgName` string
    - `orgType` string
    - `verifiedAt` string, nullable
  - `offers` union: Present when a price is known. A retailer price confirmed within the last 45 days is a single Offer (priceValidUntil = check date + 45 days, seller = that retailer); otherwise the profile's typical range as an AggregateOffer (lowPrice/highPrice).
    - object
      - `@type` 'Offer', required
      - `price` number, required
      - `priceCurrency` 'USD', required
      - `priceValidUntil` string, date
      - `seller` object
        - `@type` 'Organization'
        - `name` string
      - `url` string
    - object
      - `@type` 'AggregateOffer', required
      - `lowPrice` number, required
      - `highPrice` number
      - `priceCurrency` 'USD', required
      - `url` string
  - `dateModified` string
  - `offersEndpoint` string: Present only when the product has active promotedOffers; points to /offers/{slug}.json.

## Other responses

- `404`: No product exists at this category/slug (static 404, not a JSON error body).

---

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