Elastic Path Extending Products with Templates API
```mdx-code-block import TemplatesOverview from '/docs/partials/pxm/templates/extendingproducts.mdx'; ```
```mdx-code-block import TemplatesOverview from '/docs/partials/pxm/templates/extendingproducts.mdx'; ```
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/elastic-path:elastic-path-extending-products-with-templates-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: Product Experience Manager Introduction Extending Products…
description: Product Experience Manager uses the PIM service to manage product information, hierarchies, and price books.
version: 26.0612.7739142
x-version-timestamp: 2026-06-12 10:52:50+00:00
servers:
- url: https://euwest.api.elasticpath.com
description: EU West Production Server
- url: https://useast.api.elasticpath.com
description: US East Production Server
security:
- bearerAuth: []
tags:
- name: Extending Products with Templates
description: '```mdx-code-block
import TemplatesOverview from ''/docs/partials/pxm/templates/extendingproducts.mdx'';
```'
paths:
/pcm/products/{productID}/relationships/templates:
post:
summary: Create a product template relationship
description: Retrieves all the templates that are associated with the specified product.
operationId: createProductTemplateRelationship
parameters:
- $ref: '#/components/parameters/product_id'
tags:
- Extending Products with Templates
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/product_templates_request'
examples:
create-product-template-relationship:
$ref: '#/components/examples/templates_relationship_request'
responses:
'201':
description: Returns a created product template relationship.
content:
application/json:
schema:
$ref: '#/components/schemas/template_response'
examples:
product-templates:
$ref: '#/components/examples/template_response'
'400':
$ref: '#/components/responses/bad_request'
'403':
$ref: '#/components/responses/forbidden'
'404':
$ref: '#/components/responses/not_found'
'409':
$ref: '#/components/responses/write_conflict'
'422':
$ref: '#/components/responses/unprocessable_entity'
'500':
$ref: '#/components/responses/internal'
get:
summary: Get all product template relationships
operationId: getProductTemplateRelationships
parameters:
- $ref: '#/components/parameters/product_id'
tags:
- Extending Products with Templates
responses:
'200':
description: Returns all product template relationships.
content:
application/json:
schema:
$ref: '#/components/schemas/template_response'
examples:
product-template-relationships:
$ref: '#/components/examples/template_response'
'400':
$ref: '#/components/responses/bad_request'
'403':
$ref: '#/components/responses/forbidden'
'404':
$ref: '#/components/responses/not_found'
'409':
$ref: '#/components/responses/write_conflict'
'422':
$ref: '#/components/responses/unprocessable_entity'
'500':
$ref: '#/components/responses/internal'
delete:
summary: Delete a product template relationship
operationId: deleteProductTemplateRelationship
parameters:
- $ref: '#/components/parameters/product_id'
tags:
- Extending Products with Templates
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/product_templates_request'
examples:
delete-product-template-relationship:
$ref: '#/components/examples/templates_relationship_request'
responses:
'204':
description: No Content
'400':
$ref: '#/components/responses/bad_request'
'403':
$ref: '#/components/responses/forbidden'
'404':
$ref: '#/components/responses/not_found'
'409':
$ref: '#/components/responses/write_conflict'
'422':
$ref: '#/components/responses/unprocessable_entity'
'500':
$ref: '#/components/responses/internal'
components:
responses:
not_found:
description: Bad Request. Not Found.
content:
application/json:
schema:
$ref: '#/components/schemas/error'
examples:
internal-server-error:
value:
errors:
- title: Not Found
status: '404'
write_conflict:
description: Write conflict detected
content:
application/json:
schema:
$ref: '#/components/schemas/error'
examples:
internal-server-error:
value:
errors:
- title: Conflict
status: '409'
detail: write conflict detected
bad_request:
description: Bad request. The request failed validation.
content:
application/json:
schema:
$ref: '#/components/schemas/error'
examples:
bad-request:
value:
errors:
- title: Bad Request
detail: Could not parse the supplied filter
status: '400'
unprocessable_entity:
description: Bad request. The request failed validation.
content:
application/json:
schema:
$ref: '#/components/schemas/error'
examples:
failed-validation:
value:
errors:
- title: Failed Validation
status: '422'
detail: <XYZ> can not be empty
forbidden:
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/error'
examples:
internal-server-error:
value:
errors:
- title: Forbidden
status: '403'
detail: entity owned by organization
internal:
description: Internal server error. There was a system failure in the platform.
content:
application/json:
schema:
$ref: '#/components/schemas/error'
examples:
internal-server-error:
value:
errors:
- status: '500'
title: Internal Server Error
detail: There was an internal server error, you can report with your request id.
request_id: 635da56d-75a1-43cd-b696-7ab119756b3a
schemas:
template_response:
type: object
properties:
data:
type: array
items:
type: object
properties:
id:
description: A unique identifier for a template generated when a template is created.
type: string
type:
description: This represents the type of resource object being returned. Always `template`.
type: string
enum:
- template
error:
required:
- errors
properties:
errors:
type: array
items:
required:
- status
- title
properties:
status:
type: string
description: The HTTP response code of the error.
example: '500'
title:
type: string
description: A brief summary of the error.
example: Internal server error
detail:
type: string
description: Optional additional detail about the error.
example: An internal error has occurred.
request_id:
type: string
description: Internal request ID.
example: 00000000-0000-0000-0000-000000000000
meta:
type: object
description: Additional supporting meta data for the error.
example:
missing_ids:
- e7d50bd5-1833-43c0-9848-f9d325b08be8
product_templates_request:
type: object
properties:
data:
type: array
items:
type: object
properties:
id:
type: string
description: The unique identifier of a template.
type:
type: string
enum:
- template
description: This represents the type of resource object being returned. Always `template`.
examples:
template_response:
value:
data:
- id: 43903bfa-5352-4a3d-9496-c9ab1229a175
type: template
- id: 50f56ce9-9381-43f6-8a52-5369a8b42e52
type: template
templates_relationship_request:
value:
data:
- id: 43903bfa-5352-4a3d-9496-c9ab1229a175
type: template
- id: 50f56ce9-9381-43f6-8a52-5369a8b42e52
type: template
parameters:
product_id:
name: productID
in: path
schema:
type: string
example: 00000000-0000-0000-0000-000000000000
x-postman-example: '{{productID}}'
required: true
description: A unique identifier for the product.
securitySchemes:
bearerAuth:
type: http
scheme: bearer