Skip to content

feat(transformers): provide a region's product inventory level

package Feature request

1. Summary of expected behavior (User story)

As a construction-consumer,
I want to know how many products are in-stock at a store/business
in order to save time and operational (pickup) costs.

2. Acceptance criteria

We'll be done when:

  1. The current approximate inventory level of a Product is available by place (e.g., local or online business).
  2. The product.review property is removed.
  3. The product.offers.availabilityEnds property exists.
  4. The product.offers.availabilityStarts property exists.
  5. The product.offers.availableAtOrFrom property as an array of HomeAndConstructionBusiness exists.
  6. The product.offers.availableDeliveryMethod property as an array of DeliveryMethod enumerations exists.
  7. The The product.offers.ineligibleRegion property exists.
  8. The product.offers.inventoryLevel property as QuantitativeValue exists.
  9. The product.offers.priceSpecification property as DeliveryChargeSpecification exists.

3. Notes

3.1. How Home Depot determines inventory levels

An HD product page POSTs a GraphQL query with XHR requests to a federated datastore based on the location of the Product webpage's viewer. The response returns additional product data.

3.1.1. Request

General info Value
Request URL https://www.homedepot.com/federation-gateway/graphql?opname=productClientOnlyProduct
Request Method POST
Status Code 200 OK
Remote Address 173.222.253.243:443
Referrer Policy strict-origin-when-cross-origin
3.1.1.1. Request headers:
Request header Value
:authority: www.homedepot.com
:method: POST
:path: /federation-gateway/graphql?opname=productClientOnlyProduct
:scheme: https
Accept: */*
Accept-Encoding: gzip, deflate, br, zstd
Accept-Language: en-US,en;q=0.6
Cache-Control: no-cache
Content-Length: 10156
Content-Type: application/json
Cookies:
Dnt: 1
Origin: https://www.homedepot.com
Pragma: no-cache
Referer: https://www.homedepot.com/p/Huber-6-in-x-20-ft-ZIP-System-Linered-Stretch-Tape-EHD5017118/310526318
Sec-Ch-Ua: "Brave";v="123", "Not:A-Brand";v="8", "Chromium";v="123"
Sec-Ch-Ua-Mobile: ?0
Sec-Ch-Ua-Platform: "macOS"
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-origin
Sec-Gpc: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36
X-Api-Cookies: {"tt_search":"msr_l1l2_with_semantic","x-user-id":"41f4445f-1344-d463-4840-73d1e2a2fa93"}
X-Cloud-Trace-Context: 696bc358c0e94ba59e7c7c783c9deaa0/1;o=1
X-Current-Url: /p/Huber-6-in-x-20-ft-ZIP-System-Linered-Stretch-Tape-EHD5017118/310526318
X-Debug: false
X-Experience-Name: general-merchandise
X-Hd-Dc: origin
X-Parent-Trace-Id: 93a58e4e925b0c91e2ddd1b4dcc9bdee/1906128057135935132
X-Thd-Customer-Token:
3.1.1.2. Request payload/body:

Toggle request payload (parsed and formatted for legibility)
{
  "operationName": "productClientOnlyProduct",
  "variables": {
    "skipSubscribeAndSave": false,
    "skipFavoriteCount": false,
    "skipPaintDetails": true,
    "skipSpecificationGroup": false,
    "skipInstallServices": true,
    "skipKPF": false,
    "itemId": "310526318",
    "storeId": "2781",
    "zipCode": "48235"
  },
  "query":"query productClientOnlyProduct(
    $storeId: String, 
    $zipCode: String, 
    $quantity: Int, 
    $itemId: String!, 
    $dataSource: String, 
    $loyaltyMembershipInput: LoyaltyMembershipInput, 
    $skipSubscribeAndSave: Boolean = false, 
    $skipFavoriteCount: Boolean = false, 
    $configId: String, 
    $skipPaintDetails: Boolean = true, 
    $skipSpecificationGroup: Boolean = false, 
    $skipInstallServices: Boolean = true, 
    $skipKPF: Boolean = false) {
  product(
    itemId: $itemId
    dataSource: $dataSource
    loyaltyMembershipInput: $loyaltyMembershipInput
  ) {
    fulfillment(storeId: $storeId, zipCode: $zipCode, quantity: $quantity) {
      backordered
      fulfillmentOptions {
        type
        services {
          type
          deliveryTimeline
          deliveryDates {
            startDate
            endDate
            __typename
          }
          deliveryCharge
          dynamicEta {
            hours
            minutes
            __typename
          }
          hasFreeShipping
          freeDeliveryThreshold
          locations {
            curbsidePickupFlag
            isBuyInStoreCheckNearBy
            distance
            inventory {
              isOutOfStock
              isInStock
              isLimitedQuantity
              isUnavailable
              quantity
              maxAllowedBopisQty
              minAllowedBopisQty
              __typename
            }
            isAnchor
            locationId
            state
            storeName
            storePhone
            type
            storeTimeZone
            __typename
          }
          totalCharge
          optimalFulfillment
          hasSameDayCarDelivery
          __typename
        }
        fulfillable
        __typename
      }
      anchorStoreStatus
      anchorStoreStatusType
      backorderedShipDate
      bossExcludedShipStates
      excludedShipStates
      seasonStatusEligible
      onlineStoreStatus
      onlineStoreStatusType
      fallbackMode
      sthExcludedShipState
      bossExcludedShipState
      inStoreAssemblyEligible
      bodfsAssemblyEligible
      __typename
    }
    info {
      dotComColorEligible
      globalCustomConfigurator {
        customPosition
        customButtonText
        customDescription
        customExperience
        customExperienceUrl
        customTitle
        __typename
      }
      bathRenovation
      productSubType {
        name
        link
        __typename
      }
      movingCalculatorEligible
      forProfessionalUseOnly
      replacementOMSID
      label
      hidePrice
      ecoRebate
      quantityLimit
      categoryHierarchy
      sskMin
      sskMax
      unitOfMeasureCoverage
      wasMaxPriceRange
      wasMinPriceRange
      hasSubscription
      isBuryProduct
      isSponsored
      isGenericProduct
      isLiveGoodsProduct
      sponsoredBeacon {
        onClickBeacon
        onViewBeacon
        onClickBeacons
        onViewBeacons
        __typename
      }
      sponsoredMetadata {
        campaignId
        placementId
        slotId
        sponsoredId
        trackSource
        __typename
      }
      returnable
      samplesAvailable
      customerSignal {
        previouslyPurchased
        __typename
      }
      productDepartmentId
      productDepartment
      augmentedReality
      swatches {
        isSelected
        itemId
        label
        swatchImgUrl
        url
        value
        __typename
      }
      totalNumberOfOptions
      paintBrand
      fiscalYear
      classNumber
      paintFamily
      gccExperienceOmsId
      recommendationFlags {
        visualNavigation
        pipCollections
        packages
        ACC
        collections
        frequentlyBoughtTogether
        bundles
        batItems
        __typename
      }
      minimumOrderQuantity
      projectCalculatorEligible
      subClassNumber
      isInStoreReturnMessageEligible
      protectionPlanSku
      eligibleProtectionPlanSkus
      hasServiceAddOns
      consultationType
      pipCalculator {
        coverageUnits
        display
        publisher
        toggle
        __typename
      }
      __typename
    }
    identifiers {
      skuClassification
      productType
      storeSkuNumber
      brandName
      productLabel
      isSuperSku
      parentId
      canonicalUrl
      itemId
      sampleId
      modelNumber
      specialOrderSku
      toolRentalSkuNumber
      rentalCategory
      rentalSubCategory
      upc
      upcGtin13
      roomVOEnabled
      __typename
    }
    dataSources
    availabilityType {
      type
      discontinued
      status
      buyable
      __typename
    }
    media {
      augmentedRealityLink {
        usdz
        image
        __typename
      }
      images {
        url
        type
        subType
        sizes
        altText
        __typename
      }
      video {
        link {
          text
          url
          __typename
        }
        shortDescription
        title
        type
        videoId
        videoStill
        url
        thumbnail
        longDescription
        uploadDate
        dateModified
        __typename
      }
      threeSixty {
        id
        url
        __typename
      }
      __typename
    }
    itemId
    taxonomy {
      breadCrumbs {
        browseUrl
        creativeIconUrl
        deselectUrl
        dimensionName
        label
        refinementKey
        url
        __typename
      }
      brandLinkUrl
      __typename
    }
    pricing(storeId: $storeId) {
      value
      unitOfMeasure
      alternatePriceDisplay
      message
      original
      mapAboveOriginalPrice
      promotion {
        dollarOff
        type
        description {
          shortDesc
          longDesc
          __typename
        }
        percentageOff
        promotionTag
        savingsCenter
        savingsCenterPromos
        specialBuySavings
        specialBuyDollarOff
        specialBuyPercentageOff
        dates {
          end
          start
          __typename
        }
        experienceTag
        subExperienceTag
        __typename
      }
      alternate {
        bulk {
          pricePerUnit
          thresholdQuantity
          value
          __typename
        }
        unit {
          caseUnitOfMeasure
          unitsOriginalPrice
          unitsPerCase
          value
          __typename
        }
        __typename
      }
      preferredPriceFlag
      specialBuy
      conditionalPromotions {
        dates {
          start
          end
          __typename
        }
        description {
          shortDesc
          longDesc
          __typename
        }
        experienceTag
        subExperienceTag
        eligibilityCriteria {
          itemGroup
          minPurchaseAmount
          minPurchaseQuantity
          relatedSkusCount
          omsSkus
          __typename
        }
        reward {
          tiers {
            minPurchaseAmount
            minPurchaseQuantity
            rewardPercent
            rewardAmountPerOrder
            rewardAmountPerItem
            rewardFixedPrice
            maxAllowedRewardAmount
            maxPurchaseQuantity
            __typename
          }
          __typename
        }
        nvalues
        brandRefinementId
        __typename
      }
      __typename
    }
    subscription @skip(if: $skipSubscribeAndSave) {
      defaultfrequency
      discountPercentage
      subscriptionEnabled
      __typename
    }
    favoriteDetail @skip(if: $skipFavoriteCount) {
      count
      __typename
    }
    details {
      description
      highlights
      collection {
        url
        collectionId
        name
        __typename
      }
      installation {
        leadGenUrl
        __typename
      }
      __typename
    }
    badges(storeId: $storeId) {
      label
      name
      color
      creativeImageUrl
      endDate
      message
      timerDuration
      timer {
        timeBombThreshold
        daysLeftThreshold
        dateDisplayThreshold
        message
        __typename
      }
      __typename
    }
    reviews {
      ratingsReviews {
        totalReviews
        averageRating
        __typename
      }
      __typename
    }
    paintDetails(configId: $configId, storeId: $storeId) @skip(if: $skipPaintDetails) {
      brandLogo
      colorType
      rgb {
        red
        green
        blue
        __typename
      }
      colorDisplayName
      __typename
    }
    dataSource
    specificationGroup @skip(if: $skipSpecificationGroup) {
      specifications {
        specName
        specValue
        __typename
      }
      specTitle
      __typename
    }
    seo {
      seoKeywords
      seoDescription
      __typename
    }
    installServices(storeId: $storeId, zipCode: $zipCode) @skip(if: $skipInstallServices) {
      scheduleAMeasure
      gccCarpetDesignAndOrderEligible
      __typename
    }
    keyProductFeatures @skip(if: $skipKPF) {
      keyProductFeaturesItems {
        features {
          name
          refinementId
          refinementUrl
          value
          __typename
        }
        __typename
      }
      __typename
    }
    sizeAndFitDetail {
      attributeGroups {
        attributes {
          attributeName
          dimensions
          __typename
        }
        dimensionLabel
        productType
        __typename
      }
      __typename
    }
    seoDescription
    __typename
  }
}"}

View cURL request for additional product information…
curl 'https://www.homedepot.com/federation-gateway/graphql?opname=productClientOnlyProduct' \
  -H 'accept: */*' \
  -H 'accept-language: en-US,en;q=0.6' \
  -H 'cache-control: no-cache' \
  -H 'content-type: application/json' \
  -H 'cookie: <cookie-value>' \
  -H 'dnt: 1' \
  -H 'origin: https://www.homedepot.com' \
  -H 'pragma: no-cache' \
  -H 'referer: https://www.homedepot.com/p/Huber-6-in-x-20-ft-ZIP-System-Linered-Stretch-Tape-EHD5017118/310526318' \
  -H 'sec-ch-ua: "Brave";v="123", "Not:A-Brand";v="8", "Chromium";v="123"' \
  -H 'sec-ch-ua-mobile: ?0' \
  -H 'sec-ch-ua-platform: "macOS"' \
  -H 'sec-fetch-dest: empty' \
  -H 'sec-fetch-mode: cors' \
  -H 'sec-fetch-site: same-origin' \
  -H 'sec-gpc: 1' \
  -H 'user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36' \
  -H 'x-api-cookies: {"tt_search":"msr_l1l2_with_semantic","x-user-id":"41f4445f-1344-d463-4840-73d1e2a2fa93"}' \
  -H 'x-cloud-trace-context: 696bc358c0e94ba59e7c7c783c9deaa0/1;o=1' \
  -H 'x-current-url: /p/Huber-6-in-x-20-ft-ZIP-System-Linered-Stretch-Tape-EHD5017118/310526318' \
  -H 'x-debug: false' \
  -H 'x-experience-name: general-merchandise' \
  -H 'x-hd-dc: origin' \
  -H 'x-parent-trace-id: 93a58e4e925b0c91e2ddd1b4dcc9bdee/1906128057135935132' \
  -H 'x-thd-customer-token;' \
  --data-raw $'{"operationName":"productClientOnlyProduct","variables":{"skipSubscribeAndSave":false,"skipFavoriteCount":false,"skipPaintDetails":true,"skipSpecificationGroup":false,"skipInstallServices":true,"skipKPF":false,"itemId":"310526318","storeId":"2781","zipCode":"48235"},"query":"query productClientOnlyProduct($storeId: String, $zipCode: String, $quantity: Int, $itemId: String\u0021, $dataSource: String, $loyaltyMembershipInput: LoyaltyMembershipInput, $skipSubscribeAndSave: Boolean = false, $skipFavoriteCount: Boolean = false, $configId: String, $skipPaintDetails: Boolean = true, $skipSpecificationGroup: Boolean = false, $skipInstallServices: Boolean = true, $skipKPF: Boolean = false) {\\n  product(\\n    itemId: $itemId\\n    dataSource: $dataSource\\n    loyaltyMembershipInput: $loyaltyMembershipInput\\n  ) {\\n    fulfillment(storeId: $storeId, zipCode: $zipCode, quantity: $quantity) {\\n      backordered\\n      fulfillmentOptions {\\n        type\\n        services {\\n          type\\n          deliveryTimeline\\n          deliveryDates {\\n            startDate\\n            endDate\\n            __typename\\n          }\\n          deliveryCharge\\n          dynamicEta {\\n            hours\\n            minutes\\n            __typename\\n          }\\n          hasFreeShipping\\n          freeDeliveryThreshold\\n          locations {\\n            curbsidePickupFlag\\n            isBuyInStoreCheckNearBy\\n            distance\\n            inventory {\\n              isOutOfStock\\n              isInStock\\n              isLimitedQuantity\\n              isUnavailable\\n              quantity\\n              maxAllowedBopisQty\\n              minAllowedBopisQty\\n              __typename\\n            }\\n            isAnchor\\n            locationId\\n            state\\n            storeName\\n            storePhone\\n            type\\n            storeTimeZone\\n            __typename\\n          }\\n          totalCharge\\n          optimalFulfillment\\n          hasSameDayCarDelivery\\n          __typename\\n        }\\n        fulfillable\\n        __typename\\n      }\\n      anchorStoreStatus\\n      anchorStoreStatusType\\n      backorderedShipDate\\n      bossExcludedShipStates\\n      excludedShipStates\\n      seasonStatusEligible\\n      onlineStoreStatus\\n      onlineStoreStatusType\\n      fallbackMode\\n      sthExcludedShipState\\n      bossExcludedShipState\\n      inStoreAssemblyEligible\\n      bodfsAssemblyEligible\\n      __typename\\n    }\\n    info {\\n      dotComColorEligible\\n      globalCustomConfigurator {\\n        customPosition\\n        customButtonText\\n        customDescription\\n        customExperience\\n        customExperienceUrl\\n        customTitle\\n        __typename\\n      }\\n      bathRenovation\\n      productSubType {\\n        name\\n        link\\n        __typename\\n      }\\n      movingCalculatorEligible\\n      forProfessionalUseOnly\\n      replacementOMSID\\n      label\\n      hidePrice\\n      ecoRebate\\n      quantityLimit\\n      categoryHierarchy\\n      sskMin\\n      sskMax\\n      unitOfMeasureCoverage\\n      wasMaxPriceRange\\n      wasMinPriceRange\\n      hasSubscription\\n      isBuryProduct\\n      isSponsored\\n      isGenericProduct\\n      isLiveGoodsProduct\\n      sponsoredBeacon {\\n        onClickBeacon\\n        onViewBeacon\\n        onClickBeacons\\n        onViewBeacons\\n        __typename\\n      }\\n      sponsoredMetadata {\\n        campaignId\\n        placementId\\n        slotId\\n        sponsoredId\\n        trackSource\\n        __typename\\n      }\\n      returnable\\n      samplesAvailable\\n      customerSignal {\\n        previouslyPurchased\\n        __typename\\n      }\\n      productDepartmentId\\n      productDepartment\\n      augmentedReality\\n      swatches {\\n        isSelected\\n        itemId\\n        label\\n        swatchImgUrl\\n        url\\n        value\\n        __typename\\n      }\\n      totalNumberOfOptions\\n      paintBrand\\n      fiscalYear\\n      classNumber\\n      paintFamily\\n      gccExperienceOmsId\\n      recommendationFlags {\\n        visualNavigation\\n        pipCollections\\n        packages\\n        ACC\\n        collections\\n        frequentlyBoughtTogether\\n        bundles\\n        batItems\\n        __typename\\n      }\\n      minimumOrderQuantity\\n      projectCalculatorEligible\\n      subClassNumber\\n      isInStoreReturnMessageEligible\\n      protectionPlanSku\\n      eligibleProtectionPlanSkus\\n      hasServiceAddOns\\n      consultationType\\n      pipCalculator {\\n        coverageUnits\\n        display\\n        publisher\\n        toggle\\n        __typename\\n      }\\n      __typename\\n    }\\n    identifiers {\\n      skuClassification\\n      productType\\n      storeSkuNumber\\n      brandName\\n      productLabel\\n      isSuperSku\\n      parentId\\n      canonicalUrl\\n      itemId\\n      sampleId\\n      modelNumber\\n      specialOrderSku\\n      toolRentalSkuNumber\\n      rentalCategory\\n      rentalSubCategory\\n      upc\\n      upcGtin13\\n      roomVOEnabled\\n      __typename\\n    }\\n    dataSources\\n    availabilityType {\\n      type\\n      discontinued\\n      status\\n      buyable\\n      __typename\\n    }\\n    media {\\n      augmentedRealityLink {\\n        usdz\\n        image\\n        __typename\\n      }\\n      images {\\n        url\\n        type\\n        subType\\n        sizes\\n        altText\\n        __typename\\n      }\\n      video {\\n        link {\\n          text\\n          url\\n          __typename\\n        }\\n        shortDescription\\n        title\\n        type\\n        videoId\\n        videoStill\\n        url\\n        thumbnail\\n        longDescription\\n        uploadDate\\n        dateModified\\n        __typename\\n      }\\n      threeSixty {\\n        id\\n        url\\n        __typename\\n      }\\n      __typename\\n    }\\n    itemId\\n    taxonomy {\\n      breadCrumbs {\\n        browseUrl\\n        creativeIconUrl\\n        deselectUrl\\n        dimensionName\\n        label\\n        refinementKey\\n        url\\n        __typename\\n      }\\n      brandLinkUrl\\n      __typename\\n    }\\n    pricing(storeId: $storeId) {\\n      value\\n      unitOfMeasure\\n      alternatePriceDisplay\\n      message\\n      original\\n      mapAboveOriginalPrice\\n      promotion {\\n        dollarOff\\n        type\\n        description {\\n          shortDesc\\n          longDesc\\n          __typename\\n        }\\n        percentageOff\\n        promotionTag\\n        savingsCenter\\n        savingsCenterPromos\\n        specialBuySavings\\n        specialBuyDollarOff\\n        specialBuyPercentageOff\\n        dates {\\n          end\\n          start\\n          __typename\\n        }\\n        experienceTag\\n        subExperienceTag\\n        __typename\\n      }\\n      alternate {\\n        bulk {\\n          pricePerUnit\\n          thresholdQuantity\\n          value\\n          __typename\\n        }\\n        unit {\\n          caseUnitOfMeasure\\n          unitsOriginalPrice\\n          unitsPerCase\\n          value\\n          __typename\\n        }\\n        __typename\\n      }\\n      preferredPriceFlag\\n      specialBuy\\n      conditionalPromotions {\\n        dates {\\n          start\\n          end\\n          __typename\\n        }\\n        description {\\n          shortDesc\\n          longDesc\\n          __typename\\n        }\\n        experienceTag\\n        subExperienceTag\\n        eligibilityCriteria {\\n          itemGroup\\n          minPurchaseAmount\\n          minPurchaseQuantity\\n          relatedSkusCount\\n          omsSkus\\n          __typename\\n        }\\n        reward {\\n          tiers {\\n            minPurchaseAmount\\n            minPurchaseQuantity\\n            rewardPercent\\n            rewardAmountPerOrder\\n            rewardAmountPerItem\\n            rewardFixedPrice\\n            maxAllowedRewardAmount\\n            maxPurchaseQuantity\\n            __typename\\n          }\\n          __typename\\n        }\\n        nvalues\\n        brandRefinementId\\n        __typename\\n      }\\n      __typename\\n    }\\n    subscription @skip(if: $skipSubscribeAndSave) {\\n      defaultfrequency\\n      discountPercentage\\n      subscriptionEnabled\\n      __typename\\n    }\\n    favoriteDetail @skip(if: $skipFavoriteCount) {\\n      count\\n      __typename\\n    }\\n    details {\\n      description\\n      highlights\\n      collection {\\n        url\\n        collectionId\\n        name\\n        __typename\\n      }\\n      installation {\\n        leadGenUrl\\n        __typename\\n      }\\n      __typename\\n    }\\n    badges(storeId: $storeId) {\\n      label\\n      name\\n      color\\n      creativeImageUrl\\n      endDate\\n      message\\n      timerDuration\\n      timer {\\n        timeBombThreshold\\n        daysLeftThreshold\\n        dateDisplayThreshold\\n        message\\n        __typename\\n      }\\n      __typename\\n    }\\n    reviews {\\n      ratingsReviews {\\n        totalReviews\\n        averageRating\\n        __typename\\n      }\\n      __typename\\n    }\\n    paintDetails(configId: $configId, storeId: $storeId) @skip(if: $skipPaintDetails) {\\n      brandLogo\\n      colorType\\n      rgb {\\n        red\\n        green\\n        blue\\n        __typename\\n      }\\n      colorDisplayName\\n      __typename\\n    }\\n    dataSource\\n    specificationGroup @skip(if: $skipSpecificationGroup) {\\n      specifications {\\n        specName\\n        specValue\\n        __typename\\n      }\\n      specTitle\\n      __typename\\n    }\\n    seo {\\n      seoKeywords\\n      seoDescription\\n      __typename\\n    }\\n    installServices(storeId: $storeId, zipCode: $zipCode) @skip(if: $skipInstallServices) {\\n      scheduleAMeasure\\n      gccCarpetDesignAndOrderEligible\\n      __typename\\n    }\\n    keyProductFeatures @skip(if: $skipKPF) {\\n      keyProductFeaturesItems {\\n        features {\\n          name\\n          refinementId\\n          refinementUrl\\n          value\\n          __typename\\n        }\\n        __typename\\n      }\\n      __typename\\n    }\\n    sizeAndFitDetail {\\n      attributeGroups {\\n        attributes {\\n          attributeName\\n          dimensions\\n          __typename\\n        }\\n        dimensionLabel\\n        productType\\n        __typename\\n      }\\n      __typename\\n    }\\n    seoDescription\\n    __typename\\n  }\\n}"}'

3.1.2. Response

3.1.2.1. Response headers:
Response header Value
Access-Control-Allow-Headers: x-requested-with, authorization, Content-Type, Authorization, credential, X-XSRF-TOKEN, X-Parent-Trace-Id
Access-Control-Allow-Headers: x-requested-with, authorization, Content-Type, Authorization, credential, X-XSRF-TOKEN, X-Parent-Trace-Id
Access-Control-Allow-Methods: GET, PUT, POST, DELETE, OPTIONS
Access-Control-Allow-Methods: GET, PUT, POST, DELETE, OPTIONS
Access-Control-Allow-Origin: *
Access-Control-Allow-Origin: *
Cache-Control: max-age=0, no-cache, no-store
Content-Encoding: gzip
Content-Length: 2871
Content-Type: text/plain;charset=UTF-8
Content-Type: application/json
Date: Tue, 26 Mar 2024 01:03:07 GMT
Expires: Tue, 26 Mar 2024 01:03:07 GMT
Graphql-Service: product-information-api
Pragma: no-cache
Server-Timing: cdn-cache; desc=MISS
Server-Timing: edge; dur=47
Server-Timing: origin; dur=504
Server-Timing: ak_p; desc="1711414987101_388971226_1090123131_55143_13516_22_0_219";dur=1
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Vary: Accept-Encoding
X-Cloud-Trace-Context: 696bc358c0e94ba59e7c7c783c9deaa0
X-Cloud-Trace-Context: 696bc358c0e94ba59e7c7c783c9deaa0
X-Proto: secure
X-Tm-Zone: us-central1-c
3.1.2.2. Response payload/body:

Toggle response body…
{
 "data": {
  "product": {
   "fulfillment": {
    "backordered": false,
    "fulfillmentOptions": [
     {
      "type": "pickup",
      "services": [
       {
        "type": "boss",
        "deliveryTimeline": null,
        "deliveryDates": {
         "startDate": "2024-03-28",
         "endDate": "2024-04-02",
         "__typename": "DeliveryDate"
        },
        "deliveryCharge": null,
        "dynamicEta": null,
        "hasFreeShipping": false,
        "freeDeliveryThreshold": null,
        "locations": [
         {
          "curbsidePickupFlag": false,
          "isBuyInStoreCheckNearBy": null,
          "distance": null,
          "inventory": {
           "isOutOfStock": false,
           "isInStock": true,
           "isLimitedQuantity": false,
           "isUnavailable": false,
           "quantity": 8,
           "maxAllowedBopisQty": null,
           "minAllowedBopisQty": null,
           "__typename": "Inventory"
          },
          "isAnchor": true,
          "locationId": "2781",
          "state": "MI",
          "storeName": "Detroit 7 Mile/Meyers",
          "storePhone": null,
          "type": "online",
          "storeTimeZone": null,
          "__typename": "Location"
         }
        ],
        "totalCharge": 0,
        "optimalFulfillment": false,
        "hasSameDayCarDelivery": false,
        "__typename": "Service"
       }
      ],
      "fulfillable": true,
      "__typename": "FulfillmentOption"
     },
     {
      "type": "delivery",
      "services": [
       {
        "type": "sth",
        "deliveryTimeline": "later",
        "deliveryDates": {
         "startDate": "2024-03-29",
         "endDate": "2024-04-01",
         "__typename": "DeliveryDate"
        },
        "deliveryCharge": null,
        "dynamicEta": null,
        "hasFreeShipping": true,
        "freeDeliveryThreshold": null,
        "locations": [
         {
          "curbsidePickupFlag": null,
          "isBuyInStoreCheckNearBy": null,
          "distance": null,
          "inventory": {
           "isOutOfStock": false,
           "isInStock": true,
           "isLimitedQuantity": false,
           "isUnavailable": false,
           "quantity": 8,
           "maxAllowedBopisQty": null,
           "minAllowedBopisQty": null,
           "__typename": "Inventory"
          },
          "isAnchor": false,
          "locationId": "8119",
          "state": "MI",
          "storeName": null,
          "storePhone": null,
          "type": "online",
          "storeTimeZone": null,
          "__typename": "Location"
         }
        ],
        "totalCharge": 0,
        "optimalFulfillment": true,
        "hasSameDayCarDelivery": false,
        "__typename": "Service"
       }
      ],
      "fulfillable": true,
      "__typename": "FulfillmentOption"
     }
    ],
    "anchorStoreStatus": false,
    "anchorStoreStatusType": "NA",
    "backorderedShipDate": null,
    "bossExcludedShipStates": "AK,GU,HI,PR,VI",
    "excludedShipStates": "AK,GU,HI,PR,VI",
    "seasonStatusEligible": null,
    "onlineStoreStatus": true,
    "onlineStoreStatusType": "ACTIVE",
    "fallbackMode": false,
    "sthExcludedShipState": null,
    "bossExcludedShipState": null,
    "inStoreAssemblyEligible": false,
    "bodfsAssemblyEligible": false,
    "__typename": "Fulfillment"
   },
   "info": {
    "dotComColorEligible": false,
    "globalCustomConfigurator": null,
    "bathRenovation": false,
    "productSubType": null,
    "movingCalculatorEligible": false,
    "forProfessionalUseOnly": false,
    "replacementOMSID": null,
    "label": null,
    "hidePrice": false,
    "ecoRebate": false,
    "quantityLimit": 90,
    "categoryHierarchy": null,
    "sskMin": null,
    "sskMax": null,
    "unitOfMeasureCoverage": null,
    "wasMaxPriceRange": null,
    "wasMinPriceRange": null,
    "hasSubscription": false,
    "isBuryProduct": null,
    "isSponsored": null,
    "isGenericProduct": null,
    "isLiveGoodsProduct": false,
    "sponsoredBeacon": null,
    "sponsoredMetadata": null,
    "returnable": "90-Day",
    "samplesAvailable": false,
    "customerSignal": null,
    "productDepartmentId": null,
    "productDepartment": "21",
    "augmentedReality": false,
    "swatches": null,
    "totalNumberOfOptions": null,
    "paintBrand": null,
    "fiscalYear": null,
    "classNumber": "1",
    "paintFamily": null,
    "gccExperienceOmsId": null,
    "recommendationFlags": {
     "visualNavigation": false,
     "pipCollections": false,
     "packages": false,
     "ACC": false,
     "collections": false,
     "frequentlyBoughtTogether": true,
     "bundles": false,
     "batItems": false,
     "__typename": "RecommendationFlags"
    },
    "minimumOrderQuantity": 0,
    "projectCalculatorEligible": false,
    "subClassNumber": "7",
    "isInStoreReturnMessageEligible": false,
    "protectionPlanSku": null,
    "eligibleProtectionPlanSkus": null,
    "hasServiceAddOns": false,
    "consultationType": "Exterior Doors",
    "pipCalculator": null,
    "__typename": "Info"
   },
   "identifiers": {
    "skuClassification": "normal",
    "productType": "MERCHANDISE",
    "storeSkuNumber": "1005806038",
    "brandName": "Huber",
    "productLabel": "6 in. x 20 ft. ZIP System Linered Stretch Tape",
    "isSuperSku": false,
    "parentId": null,
    "canonicalUrl": "/p/Huber-6-in-x-20-ft-ZIP-System-Linered-Stretch-Tape-EHD5017118/310526318",
    "itemId": "310526318",
    "sampleId": null,
    "modelNumber": "EHD5017118",
    "specialOrderSku": null,
    "toolRentalSkuNumber": null,
    "rentalCategory": null,
    "rentalSubCategory": null,
    "upc": "728265020204",
    "upcGtin13": "0728265020204",
    "roomVOEnabled": false,
    "__typename": "Identifiers"
   },
   "dataSources": "catalog",
   "availabilityType": {
    "type": "Shared",
    "discontinued": false,
    "status": true,
    "buyable": true,
    "__typename": "AvailabilityType"
   },
   "media": {
    "augmentedRealityLink": null,
    "images": [
     {
      "url": "https://images.thdstatic.com/productImages/c8145b5d-5321-4987-9cb7-5d9671e77223/svn/huber-door-flashing-ehd5017118-64_<SIZE>.jpg",
      "type": "IMAGE",
      "subType": "PRIMARY",
      "sizes": [
       "65",
       "100",
       "145",
       "300",
       "400",
       "600",
       "1000"
      ],
      "altText": null,
      "__typename": "Image"
     },
     {
      "url": "https://images.thdstatic.com/productImages/43429fab-9ee9-427d-a83e-2327f38ff6b3/svn/huber-door-flashing-ehd5017118-c3_<SIZE>.jpg",
      "type": "IMAGE_ALTERNATE_VIEW",
      "subType": null,
      "sizes": [
       "65",
       "100",
       "145",
       "300",
       "400",
       "600",
       "1000"
      ],
      "altText": null,
      "__typename": "Image"
     },
     {
      "url": "https://images.thdstatic.com/productImages/7b1d726a-bf78-4816-81e0-ab05b056b423/svn/huber-door-flashing-ehd5017118-4f_<SIZE>.jpg",
      "type": "IMAGE_ALTERNATE_VIEW_2",
      "subType": null,
      "sizes": [
       "65",
       "100",
       "145",
       "300",
       "400",
       "600",
       "1000"
      ],
      "altText": null,
      "__typename": "Image"
     },
     {
      "url": "https://images.thdstatic.com/productImages/e4a4d377-3bc3-4a1f-987d-0da77dc21caa/svn/huber-door-flashing-ehd5017118-1f_<SIZE>.jpg",
      "type": "IMAGE_ALTERNATE_VIEW_3",
      "subType": null,
      "sizes": [
       "65",
       "100",
       "145",
       "300",
       "400",
       "600",
       "1000"
      ],
      "altText": null,
      "__typename": "Image"
     }
    ],
    "video": [],
    "threeSixty": null,
    "__typename": "Media"
   },
   "itemId": "310526318",
   "taxonomy": {
    "breadCrumbs": [
     {
      "browseUrl": null,
      "creativeIconUrl": null,
      "deselectUrl": null,
      "dimensionName": "Category",
      "label": "Doors & Windows",
      "refinementKey": null,
      "url": "/b/Doors-Windows/N-5yc1vZaqih",
      "__typename": "BreadCrumb"
     },
     {
      "browseUrl": null,
      "creativeIconUrl": null,
      "deselectUrl": null,
      "dimensionName": "Category",
      "label": "Door Accessories",
      "refinementKey": null,
      "url": "/b/Doors-Windows-Door-Accessories/N-5yc1vZc5eq",
      "__typename": "BreadCrumb"
     },
     {
      "browseUrl": null,
      "creativeIconUrl": null,
      "deselectUrl": null,
      "dimensionName": "Category",
      "label": "Door Flashing",
      "refinementKey": null,
      "url": "/b/Doors-Windows-Door-Accessories-Door-Flashing/N-5yc1vZc5fx",
      "__typename": "BreadCrumb"
     }
    ],
    "brandLinkUrl": "/b/Doors-Windows-Door-Accessories-Door-Flashing/Huber/N-5yc1vZc5fxZ7ay",
    "__typename": "Taxonomy"
   },
   "pricing": {
    "value": 56.63,
    "unitOfMeasure": "roll",
    "alternatePriceDisplay": false,
    "message": null,
    "original": null,
    "mapAboveOriginalPrice": null,
    "promotion": null,
    "alternate": {
     "bulk": null,
     "unit": {
      "caseUnitOfMeasure": null,
      "unitsOriginalPrice": null,
      "unitsPerCase": null,
      "value": null,
      "__typename": "UnitPricing"
     },
     "__typename": "Alternate"
    },
    "preferredPriceFlag": false,
    "specialBuy": null,
    "conditionalPromotions": [],
    "__typename": "Pricing"
   },
   "subscription": null,
   "favoriteDetail": {
    "count": 38,
    "__typename": "FavoriteDetail"
   },
   "details": {
    "description": "ZIP System stretch tape easily stretches to fit sills, curves and corners with a single piece without having to piece tape segments together. Made of a high performance composite acrylic, the tape conforms to challenging applications and locks out moisture even over mismatched surfaces. ZIP System stretch tape can be pulled up and reapplied for easy, fast and hassle-free installation that provides the right seal against weather intrusion.",
    "highlights": [
     "Stretch tape perfect for sills, curves, and corners",
     "Made of composite acrylic for challenging applications",
     "Easy to pull-off and re-apply for easy installation"
    ],
    "collection": null,
    "installation": null,
    "__typename": "Details"
   },
   "badges": [
    {
     "label": "Best Seller",
     "name": "bestseller",
     "color": null,
     "creativeImageUrl": null,
     "endDate": null,
     "message": "BestSeller in Flashing Tools & Accessories",
     "timerDuration": "0",
     "timer": null,
     "__typename": "Badge"
    }
   ],
   "reviews": {
    "ratingsReviews": {
     "totalReviews": "23",
     "averageRating": "4.3043",
     "__typename": "RatingsReviews"
    },
    "__typename": "Reviews"
   },
   "dataSource": "catalog",
   "specificationGroup": [
    {
     "specifications": [
      {
       "specName": "Returnable",
       "specValue": "90-Day",
       "__typename": "Specification"
      }
     ],
     "specTitle": "Details",
     "__typename": "SpecificationGroup"
    }
   ],
   "seo": {
    "seoKeywords": null,
    "seoDescription": "Accord a prepossessing and brilliant appearance to the floors of your residence by choosing this excellent Huber ZIP System Linered Stretch Tape.",
    "__typename": "Seo"
   },
   "keyProductFeatures": null,
   "sizeAndFitDetail": {
    "attributeGroups": [],
    "__typename": "SizeAndFitDetail"
   },
   "seoDescription": "Accord a prepossessing and brilliant appearance to the floors of your residence by choosing this excellent Huber ZIP System Linered Stretch Tape.",
   "__typename": "BaseProduct"
  }
 }
}

Edited by Zaira Ardor