Dealhubio Product Hierarchy API
The Product Hierarchy API from Dealhubio — 1 operation(s) for product hierarchy.
The Product Hierarchy API from Dealhubio — 1 operation(s) for product hierarchy.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/dealhubio:dealhubio-product-hierarchy-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Version Product Hierarchy API
description: 'This API provides a comprehensive set of services for managing versions and the associated product catalog within the DealHub CPQ system. It allows for system-to-system integration to get, create, duplicate, activate, and manage the content of versions.
Several operations, such as duplicating, activating, and uploading a product catalog, are asynchronous. These endpoints return a `request_id` for tracking.
All requests require a secret Bearer Token in the `Authorization` header, which is generated by a CPQ administrator.'
version: 1.0.0
servers:
- url: https://api.dealhub.io
description: The base URL for your DealHub instance.
security:
- bearerAuth: []
tags:
- name: Product Hierarchy
paths:
/api/v1/version/{version_id}/products_hierarchy:
get:
tags:
- Product Hierarchy
summary: Get Product Hierarchy
description: Retrieves the product hierarchy tree for a specific version.
operationId: getProductHierarchy
parameters:
- name: version_id
in: path
required: true
schema:
type: string
maxLength: 16
description: The identifier of the version.
responses:
'200':
description: Success. Returns the product hierarchy.
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/ProductHierarchyNode'
examples:
getProductHierarchyExample:
summary: Example of a product hierarchy response
value:
- element:
type: PRODUCT
mandatory: false
labelNameOrSku: product 1
alternative: false
children:
- element:
type: PRODUCT
mandatory: false
labelNameOrSku: product 3
alternative: false
children: []
- element:
type: PRODUCT
mandatory: false
labelNameOrSku: product 4
alternative: false
children:
- element:
type: LABEL
mandatory: true
labelNameOrSku: Label A
alternative: false
children:
- element:
type: PRODUCT
mandatory: false
labelNameOrSku: product 5
alternative: false
children: []
- element:
type: PRODUCT
mandatory: true
labelNameOrSku: product 6
alternative: false
children: []
- element:
type: LABEL
mandatory: false
labelNameOrSku: Label B
alternative: false
children:
- element:
type: PRODUCT
mandatory: false
labelNameOrSku: product 1
alternative: false
children:
- element:
type: PRODUCT
mandatory: false
labelNameOrSku: product 4
alternative: false
children: []
'400':
description: Bad Request. No Version was found matching the provided `version_id`.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
examples:
notFoundExample:
summary: Version not found
value:
error: Entity (ID = 7b34133847401b12) not found
code: 400
'403':
description: Unauthenticated. The `Authorization` token is missing, invalid, or does not match the user.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
examples:
unauthenticatedExample:
summary: Unauthenticated
value:
error: Unauthenticated
code: 403
post:
tags:
- Product Hierarchy
summary: Create or Update Product Hierarchy
description: Asynchronously creates or updates the product hierarchy for a 'DRAFT' version. This operation returns a `request_id` for tracking.
operationId: updateProductHierarchy
parameters:
- name: version_id
in: path
required: true
schema:
type: string
maxLength: 16
description: The identifier of the 'DRAFT' version.
requestBody:
required: true
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/ProductHierarchyNode'
examples:
updateProductHierarchyExample:
summary: Example of updating a product hierarchy
value:
- element:
type: PRODUCT
mandatory: false
labelNameOrSku: product 1
alternative: false
children:
- element:
type: PRODUCT
mandatory: false
labelNameOrSku: product 3
alternative: false
children: []
- element:
type: PRODUCT
mandatory: false
labelNameOrSku: product 4
alternative: false
children:
- element:
type: LABEL
mandatory: true
labelNameOrSku: Label A
alternative: false
children:
- element:
type: PRODUCT
mandatory: false
labelNameOrSku: product 5
alternative: false
children: []
- element:
type: PRODUCT
mandatory: true
labelNameOrSku: product 6
alternative: false
children: []
- element:
type: LABEL
mandatory: false
labelNameOrSku: Label B
alternative: false
children:
- element:
type: PRODUCT
mandatory: false
labelNameOrSku: product 1
alternative: false
children:
- element:
type: PRODUCT
mandatory: false
labelNameOrSku: product 4
alternative: false
children: []
responses:
'200':
description: Success. The update process has started.
content:
application/json:
schema:
$ref: '#/components/schemas/AsyncResponse'
'400':
description: Bad Request. The Version was not found or is not in `DRAFT` status, or the submitted hierarchy failed validation (e.g., an unknown SKU, an invalid or missing `type`/`labelNameOrSku`, a structural rule violation, or the depth/size limits were exceeded).
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
examples:
skuNotFoundExample:
summary: SKU does not exist in the products list
value:
error: The SKU [SKU-1] at [path] does not exist in the products list. Please add the SKU to the products catalog first.
code: 400
invalidTypeExample:
summary: Invalid or missing type field
value:
error: The field type is invalid / The field type is not defined.
code: 400
labelWithoutChildrenExample:
summary: Label without related products
value:
error: Label [name] is set without any related products.
code: 400
mandatoryLabelExample:
summary: Mandatory label without mandatory products
value:
error: Label [name] is a mandatory label without any mandatory products.
code: 400
maxDepthExample:
summary: Maximum hierarchy depth exceeded
value:
error: You have reached the maximum limit of 10 levels that can be added.
code: 400
maxItemsExample:
summary: Maximum hierarchy size exceeded
value:
error: You can only add a maximum of 50,000 products or labels to the product hierarchy.
code: 400
notFoundExample:
summary: Version not found
value:
error: Entity (ID = 7b34133847401b12) not found
code: 400
'403':
description: Unauthenticated. The `Authorization` token is missing, invalid, or does not match the user.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
examples:
unauthenticatedExample:
summary: Unauthenticated
value:
error: Unauthenticated
code: 403
delete:
tags:
- Product Hierarchy
summary: Delete from Product Hierarchy
description: Asynchronously deletes specified items (products, bundles, or labels) from the product hierarchy of a 'DRAFT' version.
operationId: deleteFromProductHierarchy
parameters:
- name: version_id
in: path
required: true
schema:
type: string
maxLength: 16
description: The identifier of the 'DRAFT' version.
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
items_to_delete:
type: array
items:
type: object
properties:
labelNameOrSku:
type: string
responses:
'200':
description: Success. The deletion process has started.
content:
application/json:
schema:
$ref: '#/components/schemas/AsyncResponse'
'400':
description: Bad Request. The Version was not found or is not in `DRAFT` status, or an item cannot be deleted because it has children, or is marked as mandatory or an alternative in the hierarchy.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
examples:
hasChildrenExample:
summary: Product has children
value:
error: Unable to delete product SKU-1 that has related product/s in the product hierarchy.
code: 400
mandatoryOrAlternativeExample:
summary: Product is mandatory or alternative
value:
error: Unable to delete product SKU-1 that was set as mandatory in the product hierarchy.
code: 400
notFoundExample:
summary: Version not found
value:
error: Entity (ID = 7b34133847401b12) not found
code: 400
'403':
description: Unauthenticated. The `Authorization` token is missing, invalid, or does not match the user.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
examples:
unauthenticatedExample:
summary: Unauthenticated
value:
error: Unauthenticated
code: 403
components:
schemas:
ProductHierarchyElement:
type: object
required:
- type
- labelNameOrSku
properties:
type:
type: string
enum:
- PRODUCT
- BUNDLE
- LABEL
description: The type of the hierarchy item.
labelNameOrSku:
type: string
description: The SKU of the product/bundle or the display name of the label.
mandatory:
type: boolean
description: If `true`, the user is required to select this item.
alternative:
type: boolean
description: Used to define a "Pick One" relationship among siblings.
ProductHierarchyNode:
type: object
properties:
element:
$ref: '#/components/schemas/ProductHierarchyElement'
children:
type: array
items:
$ref: '#/components/schemas/ProductHierarchyNode'
description: A nested list of child items.
AsyncResponse:
type: object
properties:
request_id:
type: string
description: The ID of the asynchronous request for tracking.
ErrorResponse:
type: object
description: A generic error response. The specific message and code vary based on the context.
properties:
error:
type: string
description: Human-readable error message describing the issue.
code:
type: integer
description: HTTP status code.
securitySchemes:
bearerAuth:
type: http
scheme: bearer
description: A secret token generated by a CPQ administrator.
x-provenance:
method: searched
source: https://developers.dealhub.io/reference
harvested: '2026-10-22'
tool: harvest-readme-openapi.py
note: Assembled verbatim from the OpenAPI definition ReadMe embeds in each operation page of the provider's developer portal; paths and components merged by API title, nothing authored.
assembled_from:
- https://developers.dealhub.io/reference/activateversion.md
- https://developers.dealhub.io/reference/deleteallproducts.md
- https://developers.dealhub.io/reference/deletefromproducthierarchy.md
- https://developers.dealhub.io/reference/deleteproductsbysku.md
- https://developers.dealhub.io/reference/duplicateversion.md
- https://developers.dealhub.io/reference/exportplaybookdata.md
- https://developers.dealhub.io/reference/extractproductsexcel.md
- https://developers.dealhub.io/reference/getasyncrequeststatus.md
- https://developers.dealhub.io/reference/getasyncrequestsummary.md
- https://developers.dealhub.io/reference/getgeneratequotetemplate.md
- https://developers.dealhub.io/reference/getproductcatalog.md
- https://developers.dealhub.io/reference/getproducthierarchy.md
- https://developers.dealhub.io/reference/getproductsbysku.md
- https://developers.dealhub.io/reference/getversionbyid.md
- https://developers.dealhub.io/reference/getversionbyname.md
- https://developers.dealhub.io/reference/getversionproducts.md
- https://developers.dealhub.io/reference/getversions.md
- https://developers.dealhub.io/reference/updateproductcatalog.md
- https://developers.dealhub.io/reference/updateproducthierarchy.md
- https://developers.dealhub.io/reference/uploadproductcatalog.md
merge:
pages: 20
deduped: 79
conflicts_kept_first: 0