Product Specification Use Cases
I want to
Request Type
Example URL
Retrieve and display details of a requested product specification. GET by ID {https://MyDomainLoginUrl} /services/apexrest/{namespace}/tmforum/productopenapi/v1/productSpecification/{ID}NOTE: For invalid category ID, you will receive HTTP 404 error.Based on the provided field values, retrieve and display details of a particular product specification ID. GET by ID and Fields {https://MyDomainLoginUrl} /services/apexrest/{namespace}/tmforum/productopenapi/v1/productSpecification/{ID}?fields=name,description,isBundleList all the product specifications present in the system. GET List {https://MyDomainLoginUrl} /services/apexrest/{namespace}/tmforum/productopenapi/v1/productSpecificationList all the product specifications present in the system based on the provided field values. GET List with Fields {https://MyDomainLoginUrl} /services/apexrest/{namespace}/tmforum/productopenapi/v1/productSpecification?fields=name,description,isBundleList all the product specifications present in the inventory based on the provided field values and filter applied. GET List by Fields and Filtering {https://MyDomainLoginUrl} /services/apexrest/{namespace}/tmforum/productopenapi/v1/productSpecification?fields=name,description,isBundle&isBundle=falseLimit the number of product specification to a maximum of specified limit and display results from the page specified by an offset. GET List by limit and offset {https://MyDomainLoginUrl} /services/apexrest/{namespace}/tmforum/productopenapi/v1/productSpecification?limit=2&offset=2Create a product specification. POST {https://MyDomainLoginUrl} /services/apexrest/{namespace}/tmforum/productopenapi/v1/productSpecificationUpdate a product specification. PATCH {https://MyDomainLoginUrl} /services/apexrest/{namespace}/tmforum/productopenapi/v1/productSpecification/{ID}Delete a product specification. DELETE {https://MyDomainLoginUrl} /services/apexrest/{namespace}/tmforum/productopenapi/v1/productSpecification/{ID}
GET by ID
Consider you want to retrieve details of a product specification from the inventory.
Context-Based Override Resolution
The TMF620 Product Catalog Management API now supports accurate resolution of product configurations, attributes, and pricing within specific bundle contexts through enhanced override handling capabilities.
What’s Changed
Previously, when retrieving product details from bundled product hierarchies, the API would:
Return duplicate records for child products that were overridden at multiple hierarchy levels
Resolve child product attributes using only the immediate parent context
The enhanced API now correctly resolves a single, contextually accurate representation of products and their configurations based on the specified bundle hierarchy.
Key Capabilities
The API supports three types of context-specific overrides:
Child Item Overrides : Retrieve bundle-specific child product configurations, including quantity, selling periods, and inclusion/exclusion rules
Attribute Overrides : Access characteristic values (such as data balance, speed, or capacity) that differ within specific bundle contexts
Price List Entry Overrides : Retrieve bundle-specific pricing instead of standard product pricing
New Query Parameters
Three new query parameters enable context-based resolution:
Parameter Type Description handleOverridesBoolean Controls override resolution behavior. When true, returns only contextually relevant overrides; when false or omitted, returns all configurations including base and overridden values. parentContextString The unique product ID of the root or bundle product providing context for override resolution. hierarchyString The complete path from root product to target product, used when a child product appears multiple times in the bundle structure. Format: rootProductId<parentProductId<childProductId
Usage Examples
Consider a product hierarchy: Triple Play Bundle → Internet Services → Fiber Internet 1Gbps
Example 1: Retrieve standalone product with all attributes (default behavior)
1 GET /productSpecification/{productId}
Returns all attributes (base + all overridden values from all contexts)
Example 2: Retrieve product with base attributes only
1 GET /productSpecification/{productId}?handleOverrides=true
Returns only the base product attributes without any overrides
Example 3: Retrieve product in specific bundle context
1 GET /productSpecification/{productId}?handleOverrides=true&parentContext={bundleProductId}
Returns the product with attributes and configurations as overridden within the specified parent bundle
Example 4: Retrieve product with explicit hierarchy path
1 GET /productSpecification/{productId}?handleOverrides=true&hierarchy={rootId}<{parentId}<{productId}
Returns the product resolved through the specified hierarchy path, useful when a product appears multiple times in the bundle structure
When handleOverrides is set to true, the API retrieves all overridden price list entries regardless of hierarchy position within the bundle
Accurate override resolution requires passing the correct parentContext or hierarchy parameters
Without context parameters, the API defaults to standalone product resolution
Context-based resolution applies to GET operations on the productSpecification resource
GET by ID and Fields
Consider you want to retrieve details of the product specification ID = f58d3bce-e229-74c5-6a4c-40aa68714c53 and get the name, description and isBundle details in the output.
Sample URL
https://vlocity-1f5-dev-ed.develop.my.salesforce.com/services/apexrest/{namespace}/tmforum/productopenapi/v1/productSpecification/f58d3bce-e229-74c5-6a4c-40aa68714c53?fields=name,description,isBundle
Sample Response
1 200 OK
2 {
3 {
4 "PageInfo": "Page 1 of 1",
5 "PageSize": 50,
6 "result": {
7 "description": "Airtel Wifi Router with 1000Mbps Bandwidth",
8 "href": "/services/apexrest/vlocity_cmt/tmforum/productopenapi/v1/productSpecification/0b1a75ff-f9ee-2547-2c57-e2f27b860356",
9 "isBundle": false,
10 "name": "Airtel Wifi Router"
11 }
12 }
13 }
GET List
Consider you want to retrieve details of all the product specifications in the inventory.
Sample URL
https://vlocity-1f5-dev-ed.develop.my.salesforce.com/services/apexrest/{namespace}/tmforum/productopenapi/v1/productSpecification
Sample Response
1 200 OK
2 {
3 "PageInfo": "Page 1 of 1",
4 "PageSize": 50,
5 "result": [
6 {
7 "description": "Powerful product that integrates with a firewall",
8 "href": "/services/apexrest/vlocity_cmt/tmforum/productopenapi/v1/productSpecification/01tDo000000iAgBIAU",
9 "id": "8a8befe1-e6d5-fafc-c909-ae32eda09d53",
10 "isBundle": true,
11 "lastUpdate": "2023-08-24T06:53:57.000+0000",
12 "lifecycleStatus": "Active",
13 "name": "PostManTestProductSpecifcation- 462757",
14 "productNumber": "CSC-340-NGFW",
15 "version": "2.0",
16 "validFor": {
17 "endDateTime": "2022-11-24T16:42:23.000+0000",
18 "startDateTime": "2020-09-23T00:00:00.000+0000"
19 }
20 },
21 {
22 "description": "Product with email security, network traffic analysis, network access control and CASB.",
23 "href": "/services/apexrest/vlocity_cmt/tmforum/productopenapi/v1/productSpecification/01tDo000000iAgGIAU",
24 "id": "07a3cca9-45c5-3957-9b31-52031fe02481",
25 "isBundle": true,
26 "lastUpdate": "2023-08-24T06:54:03.000+0000",
27 "lifecycleStatus": "Active",
28 "name": "PostManTestProductSpecifcation- 462757",
29 "productNumber": "CSC-340-NGFW",
30 "version": "2.0",
31 "validFor": {
32 "endDateTime": "2022-11-24T16:42:23.000+0000",
33 "startDateTime": "2020-09-23T00:00:00.000+0000"
34 }
35 },
36 {
37 "description": "Postpaid Add On from workbeanch 1",
38 "href": "/services/apexrest/vlocity_cmt/tmforum/productopenapi/v1/productSpecification/01tDo000000iAg6IAE",
39 "id": "54132fad-ab30-3a05-e6a3-a26f5e072d86",
40 "isBundle": false,
41 "lastUpdate": "2023-09-07T08:42:12.000+0000",
42 "lifecycleStatus": "Inactive",
43 "name": "Postpaid Addon from workbeanch 1",
44 "productNumber": "CSC-340-NGFW",
45 "version": "2.0",
46 "validFor": {
47 "endDateTime": "2024-04-25T00:00:00.000+0000",
48 "startDateTime": "2021-08-24T00:00:00.000+0000"
49 }
50 }
51 ]
52 }
GET List with Fields
Consider you want to retrieve all the product specifications by applying the requested fields.
Sample URL
https://vlocity-1f5-dev-ed.develop.my.salesforce.com/services/apexrest/{namespace}/tmforum/productopenapi/v1/productSpecification?fields=name,description,isBundle
Sample Response
1 200 OK
2
3 {
4 "PageInfo": "Page 1 of 1",
5 "PageSize": 50,
6 "result": [
7 {
8 "description": "Airtel Wifi Router with 1000Mbps Bandwidth",
9 "href": "/services/apexrest/vlocity_cmt/tmforum/productopenapi/v1/productSpecification/01tDo000000iAfhIAE",
10 "isBundle": false,
11 "name": "Airtel Wifi Router"
12 },
13 {
14 "description": "Airtel Wifi Router with 1000Mbps Bandwidth",
15 "href": "/services/apexrest/vlocity_cmt/tmforum/productopenapi/v1/productSpecification/01tDo000000iAfmIAE",
16 "isBundle": false,
17 "name": "Airtel Wifi Router"
18 },
19 {
20 "description": "Airtel Wifi Router with 1000Mbps Bandwidth",
21 "href": "/services/apexrest/vlocity_cmt/tmforum/productopenapi/v1/productSpecification/01tDo000000iAfrIAE",
22 "isBundle": false,
23 "name": "Airtel Wifi Router"
24 }
25 ]
26 }
GET List by Fields and Filtering
Consider you want to retrieve all the product specifications by a specified filter.
Sample URL
https://vlocity-1f5-dev-ed.develop.my.salesforce.com/services/apexrest/{namespace}/tmforum/productopenapi/v1/productSpecification?fields=name,description,isBundle&isBundle=false
Sample Response
1 200 OK
2 {
3 "PageInfo": "Page 1 of 1",
4 "PageSize": 50,
5 "result": [
6 {
7 "description": "Airtel Wifi Router with 1000Mbps Bandwidth",
8 "href": "/services/apexrest/vlocity_cmt/tmforum/productopenapi/v1/productSpecification/01tDo000000iAfhIAE",
9 "lifecycleStatus": "Active",
10 "name": "Airtel Wifi Router"
11 },
12 {
13 "description": "Airtel Wifi Router with 1000Mbps Bandwidth",
14 "href": "/services/apexrest/vlocity_cmt/tmforum/productopenapi/v1/productSpecification/01tDo000000iAfmIAE",
15 "lifecycleStatus": "Active",
16 "name": "Airtel Wifi Router"
17 },
18 {
19 "description": "Airtel Wifi Router with 1000Mbps Bandwidth",
20 "href": "/services/apexrest/vlocity_cmt/tmforum/productopenapi/v1/productSpecification/01tDo000000iAfrIAE",
21 "lifecycleStatus": "Active",
22 "name": "Airtel Wifi Router"
23 }
24 ]
25 }
GET List by limit and offset
Consider you want to retrieve perform the following.
Limit the number of product specifications to a maximum of specified limit
Display results from the page specified by an offset
Sample URL
https://vlocity-1f5-dev-ed.develop.my.salesforce.com/services/apexrest/{namespace}/tmforum/productopenapi/v1/productSpecification?offset=1&limit=2
Sample Response
1 200 OK
2
3 {
4 "PageInfo": "Page 1 of 4",
5 "PageSize": 2,
6 "result": [
7 {
8 "description": "Airtel Wifi Router with 1000Mbps Bandwidth",
9 "href": "/services/apexrest/vlocity_cmt/tmforum/productopenapi/v1/productOffering/01tDo000000iAfhIAE",
10 "id": "0b1a75ff-f9ee-2547-2c57-e2f27b860356",
11 "isBundle": false,
12 "isSellable": true,
13 "lastUpdate": "2023-08-24T06:49:33.000+0000",
14 "lifecycleStatus": "Active",
15 "name": "Airtel Wifi Router",
16 "productNumber": "Airtel_Wifi_Router",
17 "version": "1.0",
18 "validFor": {
19 "endDateTime": "2022-08-25T00:00:00.000+0000",
20 "startDateTime": "2022-05-23T00:00:00.000+0000"
21 },
22 "productOfferingPrice": [
23 {
24 "version": "1.0",
25 "priceType": "One-time",
26 "href": "/services/data/v57.0/sobjects/vlocity_cmt__PriceListEntry__c/a3GDo0000008rT3MAI",
27 "isBundle": false,
28 "name": "a3GDo0000008rT3",
29 "price": {
30 "amount": "0"
31 }
32 }
33 ]
34 },
35 {
36 "description": "Airtel Wifi Router with 1000Mbps Bandwidth",
37 "href": "/services/apexrest/vlocity_cmt/tmforum/productopenapi/v1/productOffering/01tDo000000iAfmIAE",
38 "id": "829c48a3-6b85-5d49-1f1f-9589b7d42816",
39 "isBundle": false,
40 "isSellable": true,
41 "lastUpdate": "2023-08-24T06:49:46.000+0000",
42 "lifecycleStatus": "Active",
43 "name": "Airtel Wifi Router",
44 "productNumber": "Airtel_Wifi_Router",
45 "version": "1.0",
46 "validFor": {
47 "endDateTime": "2022-08-25T00:00:00.000+0000",
48 "startDateTime": "2022-05-23T00:00:00.000+0000"
49 },
50 "productOfferingPrice": [
51 {
52 "version": "1.0",
53 "priceType": "One-time",
54 "href": "/services/data/v57.0/sobjects/vlocity_cmt__PriceListEntry__c/a3GDo0000008rT8MAI",
55 "isBundle": false,
56 "name": "a3GDo0000008rT8",
57 "price": {
58 "amount": "0"
59 }
60 }
61 ]
62 }
63 ]
64 }
POST
Consider you want to create a new product specification.
Sample URL
https://vlocity-1f5-dev-ed.develop.my.salesforce.com/services/apexrest/vlocity_cmt/tmforum/productopenapi/v1/productSpecification
Sample Request
1 {
2 "name" : "sample name",
3 "description" : "description text",
4 "validFor": {
5 "startDateTime": "2020-11-24T00:00:00Z",
6 "endDateTime": "2022-11-24T00:00:00Z"
7 },
8 "bundledProductSpecification": [
9 {
10 "id": "0d321a21-c07f-4067-7bed-edd8156bb05d",
11 "name": "Root Offer"
12 }
13 ],
14 "productSpecificationRelationship": [
15 {
16 "id": "e9b4e4b2-ea11-edfc-81c4-e2fc245410b1",
17 "relationshipType": "OptionalFor",
18 "name": "demo pricing"
19 }
20 ],
21 "productSpecCharacteristic": [
22 {
23 "productSpecCharacteristicValue": [
24 {
25 "valueType": "Text"
26 }
27 ],
28 "valueType": "Text",
29 "name": "Attribute Text",
30 "displayName": "Attribute Text",
31 "description": "Attribute desc",
32 "configurable": false
33 }
34 ],
35 "attachment": [
36 {
37 "url": "/servlet/servlet.FileDownload?file=0154x000000qUGEAA2",
38 "name": "image 511",
39 "description": "desc 4"
40 }
41 ]
42 }
Sample Response
1 200 OK
2
3 {
4 "productNumber": "19Aug-ParentProduct-01 updated",
5 "name": "sample name",
6 "lifecycleStatus": "Active",
7 "lastUpdate": "2023-01-10T14:03:27.000+0000",
8 "isSellable": true,
9 "isBundle": false,
10 "id": "1be8a7d6-287e-b8ea-a6f3-e05b909d4357",
11 "href": "/services/apexrest/vlocity_cmt/tmforum/productopenapi/v1/productOffering/01t4x000004EpeQAAS",
12 "description": "description updated 123",
13 "validFor": {
14 "startDateTime": "2020-08-24T00:00:00.000+0000",
15 "endDateTime": "2024-03-25T00:00:00.000+0000"
16 },
17 "productSpecificationRelationship": [
18 {
19 "id": "e9b4e4b2-ea11-edfc-81c4-e2fc245410b1",
20 "relationshipType": "OptionalFor",
21 "name": "demo pricing"
22 }
23 ],
24 "bundledProductSpecification": [
25 {
26 "id": "0d321a21-c07f-4067-7bed-edd8156bb05d",
27 "name": "Root Offer"
28 }
29 ],
30 "productSpecCharacteristic": [
31 {
32 "productSpecCharacteristicValue": [
33 {
34 "valueType": "Text"
35 }
36 ],
37 "valueType": "Text",
38 "name": "Attribute Text",
39 "displayName": "Attribute Text",
40 "description": "Attribute desc",
41 "configurable": false
42 }
43 ],
44 "attachment": [
45 {
46 "url": "/servlet/servlet.FileDownload?file=0154x000000qUGEAA2",
47 "name": "image 511",
48 "id": "a1gRO0000000MqjYAE",
49 "href": "/services/data/v48.0/sobjects/vlocity_cmt__VlocityAttachment__c/a1gRO0000000MqjYAE",
50 "description": "desc 4"
51 }
52 ]
53 }
PATCH
Consider for the product offer ID = f58d3bce-e229-74c5-6a4c-40aa68714c53 you want to update first level attributes and sub-resources.
Sample URL
Sample Request
1 {
2 "name": "Updated - Name",
3 "description" : "updated description"
4 }
Sample Response
1 {
2 "productNumber": "test number",
3 "name": "Updated - Name",
4 "lifecycleStatus": "Inactive",
5 "lastUpdate": "2023-09-27T10:07:16.000+0000",
6 "isBundle": false,
7 "id": "f58d3bce-e229-74c5-6a4c-40aa68714c53",
8 "href": "/services/apexrest/vlocity_cmt/tmforum/productopenapi/v1/productSpecification/01tDo000000i4CaIAI",
9 "description": "updated description"
10 }
DELETE
Consider you want to delete a product offering ID: 3830.
Sample URL
https://vlocity-1f5-dev-ed.develop.my.salesforce.com/services/apexrest/vlocity_cmt/tmforum/productopenapi/v1/productSpecification/3830
Sample Response