Product Types
Product types define what kind of content a product represents and what capabilities are available.
Available Types
| Type | Legacy | Content Lake | Formats |
|---|---|---|---|
| Book | Yes | Yes | PDF, ePub, InDesign |
| Video Course | Yes | No | MP4 |
| Audiobook | Yes | No | M4B |
| Interactive | No | Yes | HTML |
Legacy-only types (Video Course, Audiobook) have distributable assets that cannot currently be assembled from Content Lake documents. Content Lake-only types (Interactive) exist only as assembled experiences. Book supports both models.
Version Pinning
When attaching a Content Lake document to a product, the attachment includes a version specifier:
version=latest— the product tracks the latest Content Lake version. When the Content Lake document is updated, the product automatically reflects the new content.version=<id>— the product is pinned to a specific Content Lake version. Updates to the source document are ignored until someone explicitly re-pins.
The product-level concurrent flag controls the default:
concurrent=true— new attachments default toversion=latest.concurrent=false— new attachments require an explicit version ID.
graph LR
subgraph "Product: Go Microservices"
A["Ch 1 — Doc A v3 (pinned)"]
B["Ch 2 — Doc B v7 (pinned)"]
C["Ch 3 — Doc C latest (override)"]
end
A single product can mix pinned and latest-tracking documents. This is useful when most chapters are stable but one chapter covers a rapidly evolving topic.
Re-pinning
Re-pinning updates a document attachment from one version to
another. This emits a packt.products.content.v1.updated event
so downstream consumers know the product's content has changed.
Product Lifecycle
| State | Description |
|---|---|
| DRAFT | Initial state. Metadata is being assembled |
| REVIEW | Submitted for editorial or compliance review |
| APPROVED | Review passed. Ready for publication |
| PUBLISHED | Live and available to downstream consumers |
| RETIRED | End-of-life. No longer available |
| WITHDRAWN | Pulled from availability (from any active state) |
RETIRED and WITHDRAWN are terminal states. All state transitions
emit lifecycle events on the products EventBridge bus.
Product Metadata
Identifiers
Each product has a platform-generated ID (UUIDv7). Products that are distributed externally also carry ISBNs — one per format. ISBNs are assigned during the lifecycle, not at creation.
Core Fields
| Field | Type | Required | Description |
|---|---|---|---|
title |
string | Yes | Product title |
subtitle |
string | No | Product subtitle |
description |
string | Yes | Plain text description |
authors |
string[] | Yes | Ordered author names |
publication_date |
date | No | Scheduled or actual date |
edition |
integer | No | Edition number |
language |
string | Yes | ISO 639-1 code |
page_count |
integer | No | Generated for CL-backed |
Pricing
Pricing is defined per product with a base price and optional territory overrides.
| Field | Type | Description |
|---|---|---|
base_price |
integer | Price in micros (1,000,000 = 1.00) |
base_currency |
string | ISO 4217 currency code |
territory_prices |
map | Territory code to price object |
Territory prices are independent — each territory specifies its own amount and currency. There is no automatic currency conversion.
Available Formats
For Content Lake-backed products, formats are determined by product type. For legacy products, the format is whatever was uploaded.
| Format | Extension | CL Generation | Legacy |
|---|---|---|---|
.pdf |
Yes | Yes | |
| ePub | .epub |
Yes | Yes |
| Print (InDesign) | .indd |
Yes | No |
| Audiobook | .m4b |
No | Yes |
| Video | .mp4 |
No | Yes |
Roadmap
- More book formats (ePub 2)
- Courses (SCORM)