BizKitHub
DocsAPI ReferenceProduct/api/v1/product/detail
getProductPublic API v1

/api/v1/product/detail

No description provided.

productgetApiV1ProductDetail

Parameters

4 query

Query parameters

· 4
apiKeystringRequired

Your BizKitHub API key (passed as GET parameter).

Key format: A 32-character string matching: ^(PROD|DEV_|ROOT)[A-Za-z0-9]{28}$
Prefixes: PROD (production key), DEV_ (individual developer), ROOT (system key with no limits). Learn more

ExamplePRODPGrFxpGEtrOZfuWhnoJohUYBXuOE
slugstringRequired
Exampleexample_slug
localestringOptional

Locale code (e.g. "cs", "en"). Returns translated read model for the given locale with fallback.

Examplecs
propertiesstringOptional

Add extra on demand properties separated by semicolon.

Supported values:

Property Description
orderStatistics Extra statistics data like totalQuantitySold and count of orders in states.
galleryItemsCount Count of public images in product detail.
ExampleorderStatistics;galleryItemsCount

Response schema

1 status code documented

200SuccessFull product detail from the read model.
idstringRequired

Product code identifier.

Exampleburger
codestringRequired

Product code identifier (same as id).

Exampleburger
namestringRequired

Localized product name.

ExampleCheese Burger
slugstringRequired

URL-friendly product identifier.

Examplecheese-burger
shortDescriptionstringRequired

Short HTML description for listings. Returned as sanitized HTML string.

longDescriptionstringRequired

Full HTML description for product detail page. Returned as sanitized HTML string.

mainImageUrlstringOptional

URL of the main product image (original blob). Legacy field — kept for backward compatibility with clients written before issue #80. New integrations should prefer mainImage.originalUrl (identical value) alongside mainImage.lqip / mainImage.thumbUrl / mainImage.cardUrl / mainImage.heroUrl / mainImage.zoomUrl for progressive rendering.

Examplehttps://storage.xhp.cz/...
mainImageobject | nullRequired
One of 2:
Variant 1

Full main-image payload with all pre-rendered variants (issue #80).

Rendering contract for the FE: always paint lqip immediately as a CSS background, then progressively enhance with whichever sharp variant matches the intended display size — thumbUrl (≤ 128 px), cardUrl (≤ 480 px), heroUrl (≤ 1280 px), zoomUrl (≤ 2048 px). Fall back to originalUrl only for lightbox / download-as-image cases where the pre-rendered variants are insufficient.

Nullable slots vs. progressive rendering: every variant slot is present on the wire; null means scout hasn't rendered that particular size yet. The read model is rebuilt automatically the moment all four variants land, so a subsequent fetch will return the URLs — usually within seconds of a fresh upload, longer under scout backlog. Never fall back to originalUrl for a null variant in list UIs — that would defeat the whole point of pre-generating right-sized derivatives.

idstringRequired

External blob token of the source image (stable across variant regenerations). Use this to correlate frontend cache keys and re-request the payload after an update.

Examplea1b2c3d4e5f6g7h8
originalUrlstringRequired

Public CDN URL of the original upload — always present when the product has a main image.

Format: whatever the operator uploaded (typically JPEG or PNG, occasionally WebP or AVIF). Dimensions and byte size are unbounded and depend on the source; expect anywhere from 200 KB to several MB.

Use cases:

  • Lightbox / zoom UI that needs the highest fidelity available (fallback for zoom variant).
  • Downloadable "original" link.
  • Feeds for third parties that expect an unmodified source.

Do not use the original for above-the-fold rendering or list thumbnails — the pipeline exists precisely so those cases can bind to a pre-rendered, right-sized WebP variant instead.

Examplehttps://storage.xhp.cz/org-slug/product/2026-08/abc123.jpg
lqipstringRequired

needed to render it.

Intended use: paint immediately as a CSS background-image on the wrapper element. Once one of the sharp variants (thumbUrl, cardUrl, heroUrl, zoomUrl) finishes loading, fade it in on top; the LQIP remains behind and covers any transparent pixels.

Edge case: an empty string is possible only if the source blob was unreadable when the LQIP was generated (sharp threw and no fallback was stored). Treat empty as "no LQIP available" and skip the background paint.

Exampledata:image/webp;base64,UklGRi4AAABXRUJQVlA4ICI…
thumbUrlstring | nullRequired
One of 2:
Variant 1
string

Scout-generated 128×128 WebP thumbnail URL, or null while the variant hasn't been rendered yet (see § "When null" below).

Dimensions: 128×128 px, square, cover-cropped. Format: WebP q75. Byte range: ~4–14 KB per file.

Intended use: row-level thumbnails in lists, autocomplete dropdowns, chat message previews, notification cards, mobile grid cells (60–120 px). At this size no other variant is worth requesting.

When null: the source image has been uploaded but the scout worker on the Contabo VPS hasn't finished rendering this variant yet. Fall back to the LQIP blur alone (with an optional "processing" overlay for cells ≥ 80 px). The read model is rebuilt automatically the moment all four variants land, so a subsequent fetch will return a non-null URL — usually within seconds for a fresh upload, longer under scout backlog.

Examplehttps://storage.xhp.cz/org-slug/product/2026-08/abc123.thumb-webp.webp
Variant 2
null
cardUrlstring | nullRequired
One of 2:
Variant 1
string

Scout-generated 480×480 WebP URL, or null while the variant hasn't been rendered yet.

Dimensions: 480×480 px, square, cover-cropped. Format: WebP q80. Byte range: ~15–45 KB per file.

Intended use: medium-sized product previews — product-detail sidebar (240–520 px), category grid tiles on mobile / small desktop, storefront cards, hover popovers, e-mail template thumbnails. The single most-used variant in typical e-shop UI.

When null: same story as thumbUrl — variant not yet rendered by scout. Prefer thumbUrl (if available) as a temporary substitute over the LQIP blur alone.

Examplehttps://storage.xhp.cz/org-slug/product/2026-08/abc123.card-webp.webp
Variant 2
null
heroUrlstring | nullRequired
One of 2:
Variant 1
string

Scout-generated 1280×1280 WebP URL, or null while the variant hasn't been rendered yet.

Dimensions: 1280×1280 px, square, cover-cropped. Format: WebP q82. Byte range: ~50–150 KB per file.

Intended use: large product previews — desktop product-detail hero image (520–1280 px), homepage feature slots, campaign landing pages, retina 2× rendering for card-sized cells.

When null: same story as thumbUrl — variant not yet rendered by scout. If falling back, prefer cardUrl over thumbUrl when the intended display size is > ~480 px.

Examplehttps://storage.xhp.cz/org-slug/product/2026-08/abc123.hero-webp.webp
Variant 2
null
zoomUrlstring | nullRequired
One of 2:
Variant 1
string

Scout-generated 2048×2048 WebP URL, or null while the variant hasn't been rendered yet.

Dimensions: 2048×2048 px, square, cover-cropped. Format: WebP q82. Byte range: ~150–400 KB per file.

Intended use: lightbox / product-image zoom UI, retina 2× rendering for hero-sized cells, download-as-image feature. The largest pre-rendered variant — for anything sharper, fall back to originalUrl (unbounded, unmodified source).

When null: same story as thumbUrl — variant not yet rendered by scout. If a lightbox request comes in before zoomUrl is ready, use originalUrl as an interim fallback so the feature still works.

Examplehttps://storage.xhp.cz/org-slug/product/2026-08/abc123.zoom-webp.webp
Variant 2
null
Variant 2
null
mainImageThumbUrlstring | nullOptional
One of 2:
Variant 1
string

Scout-generated 128×128 WebP thumbnail URL, or null while the variant hasn't been rendered yet (see § "When null" below).

Dimensions: 128×128 px, square, cover-cropped. Format: WebP q75. Byte range: ~4–14 KB per file.

Intended use: row-level thumbnails in lists, autocomplete dropdowns, chat message previews, notification cards, mobile grid cells (60–120 px). At this size no other variant is worth requesting.

When null: the source image has been uploaded but the scout worker on the Contabo VPS hasn't finished rendering this variant yet. Fall back to the LQIP blur alone (with an optional "processing" overlay for cells ≥ 80 px). The read model is rebuilt automatically the moment all four variants land, so a subsequent fetch will return a non-null URL — usually within seconds for a fresh upload, longer under scout backlog.

Examplehttps://storage.xhp.cz/org-slug/product/2026-08/abc123.thumb-webp.webp
Variant 2
null
mainImageCardUrlstring | nullOptional
One of 2:
Variant 1
string

Scout-generated 480×480 WebP URL, or null while the variant hasn't been rendered yet.

Dimensions: 480×480 px, square, cover-cropped. Format: WebP q80. Byte range: ~15–45 KB per file.

Intended use: medium-sized product previews — product-detail sidebar (240–520 px), category grid tiles on mobile / small desktop, storefront cards, hover popovers, e-mail template thumbnails. The single most-used variant in typical e-shop UI.

When null: same story as thumbUrl — variant not yet rendered by scout. Prefer thumbUrl (if available) as a temporary substitute over the LQIP blur alone.

Examplehttps://storage.xhp.cz/org-slug/product/2026-08/abc123.card-webp.webp
Variant 2
null
galleryItemsobject[]Required

List of product gallery media items.

Each array item:

Product gallery media item.

type"image" | "video"Required

Media type of the gallery item.

Default: imageValues: imagevideo
idnumberRequired

Gallery item ID.

urlstringRequired

Public URL of the media file.

Examplehttps://storage.xhp.cz/...
titlestringOptional

Optional title of the gallery item.

tagstringOptional

Optional tag for grouping or filtering.

galleryItemsCountnumberRequired

Total count of gallery items.

isVariantProductbooleanRequired

Whether the product has variants.

variantItemsobject[]Required

List of product variants (only non-sold-out).

Each array item:

Product variant item.

idstringRequired

Variant relation hash.

Exampleabc123
codestringRequired

Variant code identifier.

Examplecheese-burger
namestringRequired

Variant display name.

ExampleCheese Burger
eanstringOptional

EAN barcode.

Example8594000000001
pricenumberRequired

Variant price (base product price + variant addition).

Example250
warehouseAllQuantitynumberOptional

Available warehouse quantity for this variant.

activebooleanRequired

Whether the product is active and visible.

b2bbooleanRequired

Whether this is a B2B-only product.

showInFeedbooleanRequired

Whether the product appears in public feed.

soldOutbooleanRequired

Whether the product is sold out.

positionnumberRequired

Display position for sorting.

Example1
mainCategoryobjectOptional

Product category reference.

slugstringRequired

URL-friendly category identifier.

Examplesmartphone
codestringRequired

Internal category code.

ExampleCAT-001
namestringRequired

Localized category name.

ExampleSmartphones
categoryPathItemsobject[]Required

Breadcrumb path from root to main category.

Each array item:

Product category reference.

slugstringRequired

URL-friendly category identifier.

Examplesmartphone
codestringRequired

Internal category code.

ExampleCAT-001
namestringRequired

Localized category name.

ExampleSmartphones
categoryItemsobject[]Required

All categories the product belongs to.

Each array item:

Product category reference.

slugstringRequired

URL-friendly category identifier.

Examplesmartphone
codestringRequired

Internal category code.

ExampleCAT-001
namestringRequired

Localized category name.

ExampleSmartphones
brandIdnumberOptional

Associated brand ID.

pricenumberRequired

Final product price including VAT.

Example250
priceWithoutVatnumberRequired

Product price excluding VAT.

Example206.61
vatnumberRequired

VAT percentage rate.

Example21
standardPricePercentagenumberOptional

Standard price percentage (e.g. for discounts).

sizeWidthMmnumberOptional

Product width in millimeters.

sizeHeightMmnumberOptional

Product height in millimeters.

sizeDepthMmnumberOptional

Product depth in millimeters.

weightGramsnumberOptional

Product weight in grams.

warehouseAllQuantitynumberOptional

Total available warehouse quantity.

warehouseLimitnumberOptional

Minimum warehouse quantity threshold.

eventobjectOptional

Calendar event linked to the product.

idstringRequired

Event code identifier.

startTimeDate | string | string | numberRequired

Event start date and time.

One of 4:
Variant 1
Date

Event start date and time.

Variant 2
stringdate-time
Variant 3
stringdate
Variant 4
number
endTimeDate | string | string | numberRequired

Event end date and time.

One of 4:
Variant 1
Date

Event end date and time.

Variant 2
stringdate-time
Variant 3
stringdate
Variant 4
number
isAllDaybooleanRequired

Whether the event spans the entire day.

isBlockingbooleanRequired

Whether the event blocks other bookings.

titlestringRequired

Event title.

descriptionstringOptional

Event description text.

agendastringOptional

Event agenda or schedule.

urlstringOptional

External URL for the event.

locationTitlestringOptional

Name of the event location.

advanceobjectRequired

Advanced product data.

relatedCustomersstring[]Required

External IDs of related customers.

relatedProductsobject[]Required

List of related products.

Each array item:

Related product reference.

slugstringRequired

URL slug of the related product.

namestringRequired

Related product name.

mainImageUrlstringOptional

URL of the main image.

pricenumberRequired

Product price.

mainCategoryobjectOptional

Product category reference.

slugstringRequired

URL-friendly category identifier.

Examplesmartphone
codestringRequired

Internal category code.

ExampleCAT-001
namestringRequired

Localized category name.

ExampleSmartphones
shortDescriptionstringOptional

Short HTML description. Returned as sanitized HTML string.

customFieldsobjectRequired

Custom key-value fields defined by the organisation.

lastUpdateDate | string | string | numberRequired

Timestamp of the last read model update.

One of 4:
Variant 1
Date

Timestamp of the last read model update.

Variant 2
stringdate-time
Variant 3
stringdate
Variant 4
number
orderStatisticsobjectOptional

Aggregated order statistics for the product.

totalQuantitySoldnumberRequired

Total quantity sold across all order statuses.

statusNewnumberRequired

Quantity in new orders.

statusProcessingnumberRequired

Quantity in processing orders.

statusStornonumberRequired

Quantity in canceled orders.

statusDonenumberRequired

Quantity in completed orders.

Response example

application/json
{
  "id": "burger",
  "code": "burger",
  "name": "Cheese Burger",
  "slug": "cheese-burger",
  "shortDescription": "example_shortDescription",
  "longDescription": "example_longDescription",
  "mainImageUrl": "https://storage.xhp.cz/...",
  "galleryItems": [
    {
      "type": "image",
      "id": 0,
      "url": "https://storage.xhp.cz/...",
      "title": "example_title",
      "tag": "example_tag"
    }
  ],
  "galleryItemsCount": 0,
  "isVariantProduct": false,
  "variantItems": [
    {
      "id": "abc123",
      "code": "cheese-burger",
      "name": "Cheese Burger",
      "ean": "8594000000001",
      "price": 250,
      "warehouseAllQuantity": 0
    }
  ],
  "active": false,
  "b2b": false,
  "showInFeed": false,
  "soldOut": false,
  "position": 1,
  "mainCategory": {
    "slug": "smartphone",
    "code": "CAT-001",
    "name": "Smartphones"
  },
  "categoryPathItems": [
    {
      "slug": "smartphone",
      "code": "CAT-001",
      "name": "Smartphones"
    }
  ],
  "categoryItems": [
    {
      "slug": "smartphone",
      "code": "CAT-001",
      "name": "Smartphones"
    }
  ],
  "brandId": 0,
  "price": 250,
  "priceWithoutVat": 206.61,
  "vat": 21,
  "standardPricePercentage": 0,
  "sizeWidthMm": 0,
  "sizeHeightMm": 0,
  "sizeDepthMm": 0,
  "weightGrams": 0,
  "warehouseAllQuantity": 0,
  "warehouseLimit": 0,
  "event": {
    "id": "example_id",
    "isAllDay": false,
    "isBlocking": false,
    "title": "example_title",
    "description": "example_description",
    "agenda": "example_agenda",
    "url": "example_url",
    "locationTitle": "example_locationTitle"
  },
  "advance": {
    "relatedCustomers": [
      "string"
    ]
  },
  "relatedProducts": [
    {
      "slug": "example_slug",
      "name": "example_name",
      "mainImageUrl": "example_mainImageUrl",
      "price": 0,
      "mainCategory": {
        "slug": "smartphone",
        "code": "CAT-001",
        "name": "Smartphones"
      },
      "shortDescription": "example_shortDescription"
    }
  ],
  "customFields": {},
  "orderStatistics": {
    "totalQuantitySold": 0,
    "statusNew": 0,
    "statusProcessing": 0,
    "statusStorno": 0,
    "statusDone": 0
  }
}

Request example

GET /api/v1/product/detail

get
curl -X GET "https://api.bizkithub.com/api/v1/product/detail?apiKey=PRODPGrFxpGEtrOZfuWhnoJohUYBXuOE&slug=example_slug&locale=cs&properties=orderStatistics%3BgalleryItemsCount" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_KEY"

Need an API key?

All BizKitHub public API endpoints require authentication via API key.

Get API Key