> ## Documentation Index
> Fetch the complete documentation index at: https://docs.portal.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Get Catalog Item Details

> GET /public/catalog/{ItemId} — Returns a catalog item's details including pricing and supplier info. Pass ExtendedDetails=true for specs, PDFs, and videos.

Returns the complete record for a single catalog item. By default this includes pricing, category data, and supplier information. Pass `ExtendedDetails=true` to also receive the full long description, technical specifications, linked PDF and video resources, and additional image URLs. When `ItemType` is `Labor` or `CustomItem`, the item is sourced from your account's private library rather than the shared catalog.

<Warning>
  The Catalog endpoints require separate authorization. Contact your Portal.io representative to confirm your account has catalog API access enabled.
</Warning>

<Tip>
  A `204` response (not `404`) is returned when the `ItemId` does not match any catalog item. Check for this status code in your error handling logic.
</Tip>

<RequestExample>
  ```bash curl theme={null}
  curl -i -X GET \
    'https://api.portal.io/public/catalog/8821?ExtendedDetails=true' \
    -H 'Accept: application/json' \
    -H 'X-MSS-API-APPID: YOUR_APP_ID' \
    -H 'X-MSS-API-USERKEY: YOUR_USER_KEY' \
    -H 'X-MSS-CUSTOM-DATE: Mon, 06 Apr 2026 00:22:19 GMT' \
    -H 'X-MSS-SIGNATURE: BASE64_SIGNATURE'
  ```

  ```python python theme={null}
  import requests
  from portal_auth import sign_request  # See authentication guide

  url = "https://api.portal.io/public/catalog/8821?ExtendedDetails=true"
  timestamp = "Mon, 06 Apr 2026 00:22:19 GMT"
  signature = sign_request("GET", url, "", timestamp, "YOUR_USER_KEY", "YOUR_SECRET_KEY")

  response = requests.get(url, headers={
      "Accept": "application/json",
      "X-MSS-API-APPID": "YOUR_APP_ID",
      "X-MSS-API-USERKEY": "YOUR_USER_KEY",
      "X-MSS-CUSTOM-DATE": timestamp,
      "X-MSS-SIGNATURE": signature
  })
  print(response.json())
  ```

  ```javascript node.js theme={null}
  const { signRequest } = require('./portalAuth'); // See authentication guide

  const url = "https://api.portal.io/public/catalog/8821?ExtendedDetails=true";
  const timestamp = new Date().toUTCString();
  const signature = signRequest("GET", url, "", timestamp, "YOUR_USER_KEY", "YOUR_SECRET_KEY");

  const response = await fetch(url, {
      headers: {
          "Accept": "application/json",
          "X-MSS-API-APPID": "YOUR_APP_ID",
          "X-MSS-API-USERKEY": "YOUR_USER_KEY",
          "X-MSS-CUSTOM-DATE": timestamp,
          "X-MSS-SIGNATURE": signature
      }
  });
  const data = await response.json();
  console.log(data);
  ```
</RequestExample>

<ResponseExample>
  ```json 200 theme={null}
  {
    "description": "The AVR-X3800H is a 9.4-channel, 105W AV receiver with 8K video support...",
    "productUrl": "https://portal.io/catalog/8821",
    "manufacturerProductUrl": "https://www.denon.com/avr-x3800h",
    "additionalImageUrls": [
      "https://images.portal.io/catalog/8821/angle.jpg"
    ],
    "pdfResourceLinks": [
      { "name": "Owner's Manual", "url": "https://docs.denon.com/avr-x3800h-manual.pdf" }
    ],
    "videoResourceLinks": [],
    "specs": [
      { "name": "Channels", "value": "9.4" },
      { "name": "Power Output", "value": "105W per channel" }
    ],
    "suppliers": [
      {
        "id": 5,
        "name": "D&H Distributing",
        "cost": {
          "value": 975.00,
          "isPromo": false,
          "isInStock": true,
          "unitOfMeasure": "Each",
          "discountPercentage": 0,
          "currency": { "code": "USD", "symbol": "$" },
          "lastVerifiedDate": "2026-04-01T00:00:00Z"
        }
      }
    ],
    "id": 8821,
    "brand": "Denon",
    "model": "AVR-X3800H",
    "shortDescription": "9.4-Channel 105W 8K AV Receiver",
    "primaryImageUrl": "https://images.portal.io/catalog/8821/primary.jpg",
    "parentCategoryId": 12,
    "categoryId": 47,
    "categories": ["Audio", "AV Receivers"],
    "isFavorite": false,
    "isDiscontinued": false,
    "rank": 1,
    "msrp": {
      "msrpUsd": 1299.00,
      "value": 1299.00,
      "regularValue": 1299.00,
      "isCustom": false,
      "currency": { "code": "USD", "symbol": "$" },
      "lastModifiedDate": "2026-01-15T00:00:00Z"
    },
    "defaultCost": {
      "supplierName": "D&H Distributing",
      "supplierSku": "AVR-X3800H",
      "managePriceStatus": "Activated",
      "accountNumber": "DH-12345",
      "isInStock": true,
      "isPromo": false,
      "lastVerifiedDate": "2026-04-01T00:00:00Z",
      "unitOfMeasure": "Each",
      "discountPercentage": 0,
      "regularValue": 975.00,
      "isCustom": false,
      "value": 975.00,
      "lastModifiedDate": "2026-04-01T00:00:00Z",
      "currency": { "code": "USD", "symbol": "$" }
    },
    "sellPrice": {
      "type": "CostMultiplier",
      "costMultiplier": 1.4,
      "value": 1365.00,
      "lastModifiedDate": "2026-03-01T00:00:00Z",
      "currency": { "code": "USD", "symbol": "$" }
    }
  }
  ```
</ResponseExample>


## OpenAPI

````yaml GET /public/catalog/{ItemId}
openapi: 3.1.0
info:
  title: Portal.Api
  version: '1.0'
servers:
  - url: http://127.0.0.1:5000
security: []
tags: []
paths:
  /public/catalog/{ItemId}:
    get:
      tags:
        - Catalog
      summary: Get Catalog Item Details
      description: >-
        Returns details for the requested catalog item. When ItemType is Labor
        or CustomItem, the item is returned from the current account's library;
        otherwise a standard catalog item is returned. ExtendedDetails adds
        extra information to standard catalog item responses.
      operationId: GetCatalogItem
      parameters:
        - $ref: '#/components/parameters/Accept'
        - name: X-MSS-API-APPID
          in: header
          description: Application Id
          required: true
          schema:
            type: string
        - name: X-MSS-CUSTOM-DATE
          in: header
          description: A date timestamp of the request
          required: true
          schema:
            type: string
        - name: X-MSS-SIGNATURE
          in: header
          description: A signature for the request
          required: true
          schema:
            type: string
        - name: X-MSS-API-USERKEY
          in: header
          description: User API Key
          required: true
          schema:
            type: string
        - name: ItemId
          in: path
          description: Item Id
          required: true
          schema:
            type: integer
            format: int32
        - name: ExtendedDetails
          in: query
          description: >-
            Provides additional details like full description, specs, linked
            resources
          required: false
          schema:
            type: boolean
        - name: ItemType
          in: query
          required: false
          schema:
            type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicProductDetailsModel'
        '204':
          description: The requested item doesn't exist
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Object'
        '401':
          description: >-
            Not Authorized to access this endpoint or your HMAC hash was
            incorrect.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WebServiceException'
        '402':
          description: This action requires an active subscription.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HttpError'
        '403':
          description: You do not have permission for this API call.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HttpError'
      deprecated: false
      x-codeSamples: []
components:
  parameters:
    Accept:
      name: Accept
      in: header
      description: Accept Header
      required: true
      schema:
        type: string
        enum:
          - application/json
  schemas:
    PublicProductDetailsModel:
      title: PublicProductDetailsModel
      required:
        - id
        - parentCategoryId
        - categoryId
        - categories
        - isFavorite
        - isDiscontinued
      properties:
        description:
          description: Long description of the catalog item
          type: string
        productUrl:
          description: Portal product page URL when available
          type: string
        manufacturerProductUrl:
          description: Manufacturer product page URL when available
          type: string
        additionalImageUrls:
          description: Additional image URLs for the catalog item
          type: array
          items:
            type: string
        pdfResourceLinks:
          description: Linked PDF resources for the catalog item
          type: array
          items:
            $ref: '#/components/schemas/LinkResource'
        videoResourceLinks:
          description: Linked video resources for the catalog item
          type: array
          items:
            $ref: '#/components/schemas/LinkResource'
        specs:
          description: Specification name/value pairs for the catalog item
          type: array
          items:
            $ref: '#/components/schemas/PublicSpecDetailsModel'
        suppliers:
          description: Supplier-specific entries available for this catalog item
          type: array
          items:
            $ref: '#/components/schemas/PublicSupplierInfoModel'
        id:
          description: Unique part identifier.
          type: integer
          format: int32
        brand:
          description: Brand or manufacturer name.
          type: string
        model:
          description: Model number.
          type: string
        shortDescription:
          description: Short description shown in search results.
          type: string
        primaryImageUrl:
          description: Primary image URL for the catalog item.
          type: string
        parentCategoryId:
          description: Parent category identifier.
          type: integer
          format: int32
        categoryId:
          description: Leaf category identifier.
          type: integer
          format: int32
        categories:
          description: Category breadcrumb or category labels associated with the item.
          type: array
          items:
            type: string
        isFavorite:
          description: >-
            Whether the item is marked as a favorite for the authenticated
            account.
          type: boolean
        isDiscontinued:
          description: Whether the item is discontinued.
          type: boolean
        msrp:
          $ref: '#/components/schemas/PublicMsrpModel'
        defaultCost:
          $ref: '#/components/schemas/PublicSupplierPriceModel'
        sellPrice:
          $ref: '#/components/schemas/PublicSellPriceModel'
        rank:
          description: Item rank within the search result ordering.
          type: integer
          format: int32
      description: Full catalog item detail model
      type: object
    Object:
      properties: {}
      description: Object
      type: object
    WebServiceException:
      title: WebServiceException
      properties:
        statusCode:
          type: integer
          format: int32
        statusDescription:
          type: string
        responseHeaders:
          $ref: '#/components/schemas/WebHeaderCollection'
        responseDto:
          $ref: '#/components/schemas/Object'
        responseBody:
          type: string
        message:
          type: string
        errorCode:
          type: string
        errorMessage:
          type: string
        serverStackTrace:
          type: string
        state:
          $ref: '#/components/schemas/Object'
        responseStatus:
          $ref: '#/components/schemas/ResponseStatus'
        targetSite:
          $ref: '#/components/schemas/MethodBase'
        data:
          $ref: '#/components/schemas/IDictionary'
        innerException:
          $ref: '#/components/schemas/Exception'
        helpLink:
          type: string
        source:
          type: string
        hResult:
          type: integer
          format: int32
        stackTrace:
          type: string
      description: WebServiceException
      type: object
    HttpError:
      title: HttpError
      properties:
        errorCode:
          type: string
        stackTrace:
          type: string
        contentType:
          type: string
        headers:
          $ref: '#/components/schemas/Dictionary_String_String_'
        cookies:
          type: array
          items:
            $ref: '#/components/schemas/Cookie'
        status:
          type: integer
          format: int32
        statusCode:
          type: string
        statusDescription:
          type: string
        response:
          $ref: '#/components/schemas/Object'
        responseFilter:
          $ref: '#/components/schemas/IContentTypeWriter'
        requestContext:
          $ref: '#/components/schemas/IRequest'
        paddingLength:
          type: integer
          format: int32
        resultScope:
          $ref: '#/components/schemas/Func_IDisposable_'
        options:
          $ref: '#/components/schemas/IDictionary_String_String_'
        responseStatus:
          $ref: '#/components/schemas/ResponseStatus'
        targetSite:
          $ref: '#/components/schemas/MethodBase'
        message:
          type: string
        data:
          $ref: '#/components/schemas/IDictionary'
        innerException:
          $ref: '#/components/schemas/Exception'
        helpLink:
          type: string
        source:
          type: string
        hResult:
          type: integer
          format: int32
      description: HttpError
      type: object
    LinkResource:
      title: LinkResource
      required:
        - name
        - url
      properties:
        name:
          description: Display name
          type: string
        url:
          description: Download url
          type: string
      description: LinkResource
      type: object
    PublicSpecDetailsModel:
      title: PublicSpecDetailsModel
      required:
        - name
        - value
      properties:
        name:
          description: Specification name
          type: string
        value:
          description: Specification value
          type: string
      description: Catalog specification name/value pair
      type: object
    PublicSupplierInfoModel:
      title: PublicSupplierInfoModel
      required:
        - id
        - name
        - isDefault
        - isInStock
        - isDiscontinued
        - status
        - createdDate
      properties:
        id:
          description: Unique numeric identifier of the supplier entry
          type: integer
          format: int32
        name:
          description: Supplier display name
          type: string
        cost:
          $ref: '#/components/schemas/PublicCostModel'
        isDefault:
          description: Whether this supplier is the default supplier for the item
          type: boolean
        sku:
          description: Supplier SKU or supplier-side part number
          type: string
        isInStock:
          description: Whether the supplier currently reports the item as in stock
          type: boolean
        isDiscontinued:
          description: Whether this supplier entry is marked discontinued
          type: boolean
        status:
          description: Portal manage-price status for this supplier entry
          type: string
        createdDate:
          description: UTC timestamp when the supplier entry was created
          type: string
          format: date-time
        accountNumber:
          description: >-
            Supplier account number used by the authenticated dealer when
            available
          type: string
      description: Supplier-specific catalog item information
      type: object
    PublicMsrpModel:
      title: PublicMsrpModel
      required:
        - isCustom
        - lastModifiedDate
      properties:
        msrpUsd:
          description: >-
            MSRP converted to USD when available in addition to the current
            account currency.
          type: number
          format: double
        regularValue:
          description: Regular or non-custom price value when available.
          type: number
          format: double
        isCustom:
          description: Whether the current value is a custom override.
          type: boolean
        futurePrice:
          $ref: '#/components/schemas/PublicFuturePrice'
        value:
          description: Current numeric value of the price.
          type: number
          format: double
        lastModifiedDate:
          description: UTC timestamp when this price was last modified.
          type: string
          format: date-time
        modifiedBy:
          description: Display name of the user or process that last modified this price.
          type: string
        currency:
          $ref: '#/components/schemas/PublicCurrencyModel'
      description: MSRP information returned for a catalog item.
      type: object
    PublicSupplierPriceModel:
      title: PublicSupplierPriceModel
      required:
        - supplierName
        - managePriceStatus
        - isInStock
        - isPromo
        - isCustom
        - lastModifiedDate
      properties:
        supplierName:
          description: Supplier display name.
          type: string
        supplierSku:
          description: Supplier SKU or supplier-side part number.
          type: string
        managePriceStatus:
          description: Portal manage-price status for this supplier price.
          type: string
          enum:
            - None
            - Pending
            - RequireSecondAuthorization
            - Activated
            - BlockedBrand
            - Blocked
        accountNumber:
          description: >-
            Supplier account number used for the authenticated dealer, when
            available.
          type: string
        isInStock:
          description: Whether the supplier currently reports the item as in stock.
          type: boolean
        isPromo:
          description: Whether the current supplier cost is a promotional price.
          type: boolean
        lastVerifiedDate:
          description: UTC timestamp when the supplier price was last verified.
          type: string
          format: date-time
        unitOfMeasure:
          description: Unit of measure for the supplier price.
          type: string
        discountPercentage:
          description: Supplier discount percentage when applicable.
          type: number
          format: double
        regularValue:
          description: Regular or non-custom price value when available.
          type: number
          format: double
        isCustom:
          description: Whether the current value is a custom override.
          type: boolean
        futurePrice:
          $ref: '#/components/schemas/PublicFuturePrice'
        value:
          description: Current numeric value of the price.
          type: number
          format: double
        lastModifiedDate:
          description: UTC timestamp when this price was last modified.
          type: string
          format: date-time
        modifiedBy:
          description: Display name of the user or process that last modified this price.
          type: string
        currency:
          $ref: '#/components/schemas/PublicCurrencyModel'
      description: Supplier-specific cost information for a catalog item.
      type: object
    PublicSellPriceModel:
      title: PublicSellPriceModel
      required:
        - type
        - lastModifiedDate
      properties:
        type:
          description: Sell-price calculation type.
          type: string
        costMultiplier:
          description: >-
            Multiplier applied to cost when the sell-price type uses cost-based
            pricing.
          type: number
          format: double
        value:
          description: Current numeric value of the price.
          type: number
          format: double
        lastModifiedDate:
          description: UTC timestamp when this price was last modified.
          type: string
          format: date-time
        modifiedBy:
          description: Display name of the user or process that last modified this price.
          type: string
        currency:
          $ref: '#/components/schemas/PublicCurrencyModel'
      description: Sell-price information returned for a catalog item.
      type: object
    WebHeaderCollection:
      title: WebHeaderCollection
      properties: {}
      description: WebHeaderCollection
      type: object
    ResponseStatus:
      title: ResponseStatus
      properties:
        errorCode:
          type: string
        message:
          type: string
        stackTrace:
          type: string
        errors:
          type: array
          items:
            $ref: '#/components/schemas/ResponseError'
        meta:
          $ref: '#/components/schemas/Dictionary_String_String_'
      description: ResponseStatus
      type: object
    MethodBase:
      title: MethodBase
      properties: {}
      description: MethodBase
      type: object
    IDictionary:
      title: IDictionary
      properties: {}
      description: IDictionary
      type: object
    Exception:
      title: Exception
      properties: {}
      description: Exception
      type: object
    Dictionary_String_String_:
      title: Dictionary<String,String>
      additionalProperties:
        type: string
      description: Dictionary<String,String>
      type: object
    Cookie:
      title: Cookie
      properties: {}
      description: Cookie
      type: object
    IContentTypeWriter:
      title: IContentTypeWriter
      properties: {}
      description: IContentTypeWriter
      type: object
    IRequest:
      title: IRequest
      properties: {}
      description: IRequest
      type: object
    Func_IDisposable_:
      title: Func`1
      properties: {}
      description: Func<IDisposable>
      type: object
    IDictionary_String_String_:
      title: IDictionary<String,String>
      additionalProperties:
        type: string
      description: IDictionary<String,String>
      type: object
    PublicCostModel:
      title: PublicCostModel
      required:
        - isPromo
        - isCustom
        - lastModifiedDate
      properties:
        isPromo:
          description: Whether the current supplier cost is a promotional price.
          type: boolean
        lastVerifiedDate:
          description: UTC timestamp when the supplier price was last verified.
          type: string
          format: date-time
        unitOfMeasure:
          description: Unit of measure for the supplier price.
          type: string
        discountPercentage:
          description: Supplier discount percentage when applicable.
          type: number
          format: double
        regularValue:
          description: Regular or non-custom price value when available.
          type: number
          format: double
        isCustom:
          description: Whether the current value is a custom override.
          type: boolean
        futurePrice:
          $ref: '#/components/schemas/PublicFuturePrice'
        value:
          description: Current numeric value of the price.
          type: number
          format: double
        lastModifiedDate:
          description: UTC timestamp when this price was last modified.
          type: string
          format: date-time
        modifiedBy:
          description: Display name of the user or process that last modified this price.
          type: string
        currency:
          $ref: '#/components/schemas/PublicCurrencyModel'
      description: Supplier cost information used by public catalog responses.
      type: object
    PublicFuturePrice:
      title: PublicFuturePrice
      required:
        - effectiveDate
        - lastModifiedDate
        - isInUse
      properties:
        value:
          description: Future price value.
          type: number
          format: double
        effectiveDate:
          description: UTC timestamp when the future price becomes effective.
          type: string
          format: date-time
        lastModifiedDate:
          description: UTC timestamp when the future price record was last modified.
          type: string
          format: date-time
        isInUse:
          description: Whether the future price is currently active.
          type: boolean
      description: Future-dated price scheduled for a catalog item.
      type: object
    PublicCurrencyModel:
      title: PublicCurrencyModel
      required:
        - code
        - symbol
      properties:
        code:
          description: Currency code, for example USD.
          type: string
        symbol:
          description: Currency symbol used for display, for example $.
          type: string
      description: Currency code and symbol used to display money values.
      type: object
    ResponseError:
      title: ResponseError
      properties:
        errorCode:
          type: string
        fieldName:
          type: string
        message:
          type: string
        meta:
          $ref: '#/components/schemas/Dictionary_String_String_'
      description: ResponseError
      type: object

````