Get product details
Returns full product details including variants, options, and HTML-formatted description.
This endpoint provides complete information about a product in a project, including:
Product Information:
- Basic details (name, description as HTML, category, logo)
- Pricing structure (fixed price, subscription price, per-unit price)
- Price calculation details (unit name, frequency, final calculated prices)
- Quantity and active date ranges
Variants:
- All available product variants (e.g., Standard, Pro, Enterprise)
- Each variant includes its own pricing and HTML-formatted description
- Active variant status and sort order
Options:
- All available product options (add-ons or configuration choices)
- Option values with extra pricing adjustments
- Required/multiple selection settings
The description and variant descriptions are returned as HTML, converted from the internal document format.
GET
/projects/{projectId}/products/{productId}Authorization
AuthorizationOAuth2 access token · headerrequiredScopes:
api:reador
AuthorizationBearer token (JWT) · headerrequiredPath parameters
projectIdstring<uuid>requiredProject ID
productIdstring<uuid>requiredProduct ID
Responses
200Product details retrieved successfully
activeFromstring<date> | nullrequiredStart date when this product becomes active. Format: ISO 8601 date (YYYY-MM-DD). Null if no start date is set.
activeTostring<date> | nullrequiredEnd date when this product becomes inactive. Format: ISO 8601 date (YYYY-MM-DD). Null if no end date is set.
categoryIdstringrequiredUUID of the product category
descriptionstringrequiredProduct description formatted as HTML. Converted from the internal document format.
finalNameobject | nullrequiredFinal display name combining product name and active variant name (if a variant is active)
finalPriceFixedobject | nullrequiredFinal calculated fixed price including variant and option adjustments. This is the price used for billing.
finalPricePerUnitobject | nullrequiredFinal calculated per-unit price including variant and option adjustments
finalPriceSubscriptionobject | nullrequiredFinal calculated subscription price including variant and option adjustments. This is the recurring price per billing period.
idstringrequiredUUID of the product in the project
logoIdobject | nullrequiredUUID of the logo file associated with this product. Null if no logo is set.
namestringrequiredProduct name as defined in the product
optionsProductOptionResponseDto[]requiredArray of all available options for this product
Show propertiesHide properties
Array of
ProductOptionResponseDtoidstringrequiredUUID of the option
isMultiplebooleanrequiredWhether multiple values can be selected from this option
isRequiredbooleanrequiredWhether this option must be selected when configuring the product
namestringrequiredName of the option (e.g., Color, Size, Add-ons)
sortnumberrequiredSort order of this option. Lower values appear first when listing options.
valuesProductOptionValueResponseDto[]requiredArray of all possible values for this option
Show propertiesHide properties
Array of
ProductOptionValueResponseDtoextraPriceFixedobject | nullrequiredAdditional fixed price added when this option value is selected. Null or 0 if no extra fixed cost.
extraPricePerUnitobject | nullrequiredAdditional per-unit price added when this option value is selected. Null or 0 if no extra per-unit cost.
extraPriceSubscriptionobject | nullrequiredAdditional subscription price added per billing period when this option value is selected. Null or 0 if no extra subscription cost.
idstringrequiredUUID of the option value
isActivatedbooleanrequiredWhether this option value is currently selected/activated for the product
namestringrequiredName of the option value (e.g., Red, Blue, Large, Small)
sortnumberrequiredSort order of this option value. Lower values appear first when listing option values.
priceFixedobject | nullrequiredBase fixed price for the product before variant and option adjustments
priceFrequencyobject | nullrequiredBilling frequency in months for subscription and per-unit pricing. Valid values: 1, 3, 6, or 12.
pricePerUnitobject | nullrequiredBase per-unit price before variant and option adjustments
priceSubscriptionobject | nullrequiredBase subscription price per billing period before variant and option adjustments
priceUnitNameobject | nullrequiredUnit name for per-unit pricing (e.g., per user, per hour)
quantitynumberrequiredNumber of units of this product in the project
variantsProductVariantResponseDto[]requiredArray of all available variants for this product
Show propertiesHide properties
Array of
ProductVariantResponseDtodescriptionobject | nullrequiredVariant description formatted as HTML. Describes what makes this variant different from others.
idstringrequiredUUID of the variant
isActivatedbooleanrequiredWhether this variant is currently active for the product. Only one variant can be active at a time.
namestringrequiredName of the variant (e.g., Standard, Pro, Enterprise)
priceFixedobject | nullrequiredOne-time fixed price for this variant. Null if this variant does not have fixed pricing.
pricePerUnitobject | nullrequiredPer-unit price for this variant. Null if this variant does not have per-unit pricing.
priceSubscriptionobject | nullrequiredRecurring subscription price per billing period for this variant. Null if this variant does not have subscription pricing.
sortnumberrequiredSort order of this variant. Lower values appear first when listing variants.
401Unauthorized - Invalid or missing authentication token
403Forbidden - Insufficient permissions or no project access
404Not Found - Product or project does not exist
Request
curl -X GET "https://leadtime.app/api/public/projects/%3Cuuid%3E/products/%3Cuuid%3E" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"const response = await fetch("https://leadtime.app/api/public/projects/%3Cuuid%3E/products/%3Cuuid%3E", {
method: "GET",
headers: {
"Authorization": "Bearer YOUR_ACCESS_TOKEN"
}
});import requests
response = requests.get(
"https://leadtime.app/api/public/projects/%3Cuuid%3E/products/%3Cuuid%3E",
headers={
"Authorization": "Bearer YOUR_ACCESS_TOKEN"
},
)Response
{
"activeFrom": "2024-01-01",
"activeTo": "2024-12-31",
"categoryId": "550e8400-e29b-41d4-a716-446655440001",
"description": "<p>Product description</p>",
"finalName": "Variant Name",
"finalPriceFixed": 100,
"finalPricePerUnit": 5,
"finalPriceSubscription": 25,
"id": "550e8400-e29b-41d4-a716-446655440000",
"logoId": "550e8400-e29b-41d4-a716-446655440008",
"name": "Product Name",
"options": [
{
"id": "550e8400-e29b-41d4-a716-446655440004",
"isMultiple": false,
"isRequired": true,
"name": "Color",
"sort": 0,
"values": [
{
"extraPriceFixed": 5,
"extraPricePerUnit": 1,
"extraPriceSubscription": 2,
"id": "550e8400-e29b-41d4-a716-446655440007",
"isActivated": true,
"name": "Color: Red",
"sort": 0
}
]
}
],
"priceFixed": 100,
"priceFrequency": 1,
"pricePerUnit": 5,
"priceSubscription": 25,
"priceUnitName": "per user",
"quantity": 1,
"variants": [
{
"description": "<p>Premium variant with additional features</p>",
"id": "550e8400-e29b-41d4-a716-446655440006",
"isActivated": true,
"name": "Premium",
"priceFixed": 150,
"pricePerUnit": 10,
"priceSubscription": 50,
"sort": 0
}
]
}Unauthorized - Invalid or missing authentication token
Forbidden - Insufficient permissions or no project access
Not Found - Product or project does not exist