Elastic Path Product File Relationships API

Products are the items or services that you might want to sell in your store. In Product Experience Manager, products can also have associated rich media assets, such as product images or a file containing additional product details. You can do this using [Files API](/docs/api/pxm/files). Once you have created your files, you associate files with your products using the [Create Product-File Relationships API](/docs/api/pxm/products/create-product-file-relationships).

OpenAPI Specification

elastic-path-product-file-relationships-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  version: 25.1126.6886238
  x-version-timestamp: 2025-11-26 19:10:23+00:00
  title: Addresses Introduction Account Addresses Product File Relationships API
  description: 'The Addresses API allows you to organize account addresses. Addresses are a sub-resource of `account` resources, an account can have multiple addresses, such as home, work, and neighbour.


    You can use an account address with either [client_credentials access token](/docs/api/authentication/create-an-access-token) or a combination of [implicit access token](/docs/api/authentication/create-an-access-token) and [Account Management authentication](/docs/api/accounts/post-v-2-account-members-tokens) token.

    '
  contact:
    name: Elastic Path
    url: https://www.elasticpath.com
    email: support@elasticpath.com
  license:
    url: https://elasticpath.dev
    name: MIT
servers:
- url: https://useast.api.elasticpath.com
  description: US East
- url: https://euwest.api.elasticpath.com
  description: EU West
security:
- BearerToken: []
tags:
- name: Product File Relationships
  description: 'Products are the items or services that you might want to sell in your store. In Product Experience Manager, products can also have associated rich media assets, such as product images or a file containing additional product details.


    You can do this using [Files API](/docs/api/pxm/files).


    Once you have created your files, you associate files with your products using the [Create Product-File Relationships API](/docs/api/pxm/products/create-product-file-relationships).

    '
paths:
  /pcm/products/{productID}/relationships/files:
    get:
      summary: Get all product file relationships
      description: Retrieves all files that are associated with the specified product.
      operationId: getProductFileRelationships
      tags:
      - Product File Relationships
      parameters:
      - $ref: '#/components/parameters/product_id'
      responses:
        '200':
          description: Returns all product file relationships.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/file_response'
              examples:
                product-file-relationships:
                  $ref: '#/components/examples/file_relationship_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'
    post:
      summary: Create a product file relationship
      operationId: createProductFileRelationships
      tags:
      - Product File Relationships
      parameters:
      - $ref: '#/components/parameters/product_id'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/product_files_request'
            examples:
              create-product-file-relationship:
                $ref: '#/components/examples/file_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'
    put:
      summary: Replace a product file relationship
      operationId: updateProductFileRelationships
      tags:
      - Product File Relationships
      parameters:
      - $ref: '#/components/parameters/product_id'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/product_files_request'
            examples:
              replace-product-file-relationship:
                $ref: '#/components/examples/file_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'
    delete:
      summary: Delete a product file relationships
      operationId: deleteProductFileRelationships
      tags:
      - Product File Relationships
      parameters:
      - $ref: '#/components/parameters/product_id'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/product_files_request'
            examples:
              delete-product-file-relationships:
                $ref: '#/components/examples/file_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:
    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'
    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
    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'
    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:
    file_response:
      type: object
      properties:
        data:
          type: array
          items:
            type: object
            properties:
              id:
                type: string
                description: The unique identifier of the file.
              type:
                type: string
                description: This represents the type of resource object being returned. Always `file`.
                enum:
                - file
              meta:
                type: object
                properties:
                  created_at:
                    type: string
                    description: The date and time the file relationship was created.
                    format: date-time
                    nullable: true
                  tags:
                    type: array
                    description: The file tags.
                    items:
                      type: string
    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_files_request:
      type: object
      properties:
        data:
          type: array
          items:
            type: object
            properties:
              id:
                description: A unique identifier for a file generated when a file is created.
                type: string
              type:
                description: This represents the type of resource being returned. Always `file`.
                type: string
                enum:
                - file
              meta:
                type: object
                properties:
                  tags:
                    description: The files associated with a product.
                    type: array
                    items:
                      type: string
                additionalProperties: false
  examples:
    file_relationship_response:
      value:
        data:
        - id: 43903bfa-5352-4a3d-9496-c9ab1229a175
          type: file
        - id: 50f56ce9-9381-43f6-8a52-5369a8b42e52
          type: file
    file_relationship_request:
      value:
        data:
        - id: 43903bfa-5352-4a3d-9496-c9ab1229a175
          type: file
        - id: 50f56ce9-9381-43f6-8a52-5369a8b42e52
          type: file
  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:
    BearerToken:
      type: http
      scheme: bearer