fabric Experiences (XM) API

fabric Experiences (formerly XM) is the headless storefront content service — pages, global components, and menus served from a CDN-backed read API. Powers the merchandiser-authored, shopper-facing surfaces of fabric storefronts.

fabric Experiences (XM) API is one of 16 APIs that fabric publishes on the APIs.io network, described by a machine-readable OpenAPI specification.

This API exposes 2 machine-runnable capabilities that can be deployed as REST, MCP, or Agent Skill surfaces via Naftiko.

Tagged areas include Experiences, XM, Content, Storefront, and Pages. The published artifact set on APIs.io includes API documentation, an OpenAPI specification, and 2 Naftiko capability specs.

OpenAPI Specification

fabric-experiences-openapi.yml Raw ↑
openapi: 3.0.0
info:
  version: 2.0.0
  description: >-
    fabric's Experiences (formerly known as XM) enables you to design,
    implement, and optimize omnichannel e-commerce experiences, without having
    to code. With XM, you can easily add parent and child categories through our
    intuitive UI to create your website navigation, and seamlessly integrate
    with our APIs    for dynamic navigation rendering on your store front. In
    addition, developers can implement agile design by creating reusable design
    components and use one set of data and APIs for every channel.
  title: Experiences v2 (XM v2)
  contact:
    email: [email protected]
  license:
    name: fabric Inc
    url: https://fabric.inc/api-license
servers:
  - url: https://cdn.xm.fabric.inc/api
tags:
  - name: Pages
    description: >-
      XM Pages API allows you to fetch all the live pages, or a live page by a
      specific URL
  - name: Global Components
    description: >-
      XM Global Components API allows you to fetch all the live global component
      data
  - name: Menu
    description: XM Menu API allows you to fetch menus and their items
paths:
  /v2/pages/live:
    get:
      summary: Get Live Pages for Specified Channels
      description: Get a list of all the live pages for the specified channels
      operationId: getLivePagesV2
      tags:
        - Pages
      parameters:
        - in: query
          name: offset
          description: Number of items to omit before collecting the resulting set
          schema:
            type: integer
            default: 0
        - in: query
          name: limit
          description: Total number of results
          schema:
            type: integer
            default: 20
        - in: query
          name: channels
          description: Comma-separated list of channel IDs
          schema:
            type: string
            default: '12'
        - $ref: '#/components/parameters/XSiteContent'
      responses:
        '200':
          description: Successful operation
          content:
            application/json:
              schema:
                type: object
                description: 200 response object
                properties:
                  message:
                    type: string
                    description: Status message
                  data:
                    type: object
                    description: >-
                      Object holding the query information and the list of live
                      page versions
                    properties:
                      query:
                        type: object
                        description: Query information
                        properties:
                          limit:
                            type: integer
                            description: Maximum number of records
                          offset:
                            type: integer
                            description: >-
                              Number of items omitted before collecting the
                              resulting set
                          count:
                            type: integer
                            description: Total number of records
                          channels:
                            type: array
                            description: Channel IDs to filter live pages
                            items:
                              type: string
                              description: Channel ID
                      livePages:
                        type: array
                        description: Array of live page versions
                        items:
                          type: object
                          description: Version details of the live page
                          allOf:
                            - $ref: '#/components/schemas/PageVersion'
                            - type: object
                              properties:
                                page:
                                  allOf:
                                    - $ref: '#/components/schemas/Page'
                                    - type: object
                                      properties:
                                        typeId:
                                          type: string
                                          description: >-
                                            Database ID for the page type linked to
                                            the page
                                        typeName:
                                          type: string
                                          description: Name of the page type
                                        typeUrl:
                                          type: string
                                          description: URL associated with page type
              examples:
                LivePagesExist:
                  summary: Live Pages Exist
                  value:
                    message: >-
                      List of pages with queryParams
                      {"channels":"02SZCA,00SZAU","offset":0,"limit":20}
                    data:
                      query:
                        limit: 20
                        offset: 0
                        count: 1
                        channels:
                          - 02SZCA
                          - 00SZAU
                      livePages:
                        - _id: 613a76a1fa9449000f6c36c3
                          isArchived: false
                          name: Default
                          channel:
                            - 12
                          channels:
                            - 00SZAU
                            - 02SZCA
                          createdAt: '2021-09-09T21:03:29.712Z'
                          updatedAt: '2021-10-14T20:31:47.369Z'
                          components:
                            - _id: 61689237068cae000f12ef90
                              id: AboutUs
                              params:
                                desktopHeroImage:
                                  url: https://imgurl.com/path/myPhoto.jpg
                                  altText: Custom image
                                aboutUsContent:
                                  - text: About us
                                    firstText: Our Company
                                    secondText: Our mission
                                    thirdText: Our values
                                    paragraph: false
                                    dialog: false
                                    components: []
                                components: []
                                additionalProp1: {}
                              order: 1
                              additionalProp1: {}
                          endDate: '2099-12-31T00:00:00.000Z'
                          pageId: 613a76a15363f9e9575dc953
                          status: SCHEDULED
                          versionId: 2446
                          page:
                            _id: 613a76a15363f9e9575dc953
                            name: Components
                            pageUrl: /components
                            __v: 0
                            channels:
                              - 00SZAU
                              - 02SZCA
                            createdAt: '2021-09-09T21:03:29.617Z'
                            isActive: true
                            isArchived: false
                            pageId: 1377
                            seoFields:
                              title: SEO
                              description: SEO description
                              _id: 612e4756c4b3c60010fff859
                              metadata:
                                - _id: 612e4756c4b3c60010fff85a
                                  name: summary
                                  content: Types of components
                                  createdAt: '2021-08-31T15:14:30.973Z'
                                  updatedAt: '2021-08-31T15:14:30.973Z'
                              createdAt: '2021-08-31T15:14:30.973Z'
                              updatedAt: '2021-08-31T15:14:30.973Z'
                            typeId: 61325fd059cbdbe62e888bc0
                            updatedAt: '2021-10-14T20:31:46.794Z'
                            typeName: Product category page
                            typeUrl: /category
                NoLivePages:
                  summary: No Live Pages
                  value:
                    message: >-
                      No live pages found with queryParams
                      {"channels":"01SZUS","offset":0,"limit":20}
                    query:
                      limit: 20
                      offset: 0
                      count: 0
                      channels:
                        - 01SZUS
                    livePages: []
        '404':
          description: Request was received but no data matches the request parameters
          content:
            application/json:
              schema:
                type: object
                description: 404 response object
                properties:
                  status:
                    type: string
                    description: Status description
                  message:
                    type: string
                    description: String message to inform client of error
                  statusCode:
                    type: integer
                    description: Status code of response
                example:
                  status: PAGE_NOT_FOUND
                  message: No Page Entry Found.
                  statusCode: 404
        '500':
          description: Request was received but an internal error occurred.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                code: INTERNAL_SERVER_ERROR
                message: >-
                  An internal error occurred. If the issue persists please
                  contact [email protected].
  /v2/pages/metadata:
    get:
      summary: Get Meta Information About Live Pages
      description: >-
        Get all the meta information such as name, url, channels, and SEO
        fields.
      operationId: getLivePagesMetaV2
      tags:
        - Pages
      parameters:
        - in: query
          name: channels
          description: Comma-separated list of channel IDs
          schema:
            type: string
            default: '12'
        - in: query
          name: size
          description: Number of records to be returned
          required: false
          schema:
            type: integer
            format: int32
            minimum: 1
            default: 10
            maximum: 100
        - in: query
          name: startCursor
          description: Record pointer to get items after the specified record
          required: false
          schema:
            type: string
            minLength: 15
            maxLength: 15
            example: H796HJHGANLSADS
        - $ref: '#/components/parameters/XSiteContent'
      responses:
        '200':
          description: Successful operation
          content:
            application/json:
              schema:
                type: object
                description: 200 response object
                properties:
                  size:
                    description: Number of records to be returned
                    type: integer
                    format: int32
                    minimum: 1
                    default: 10
                    maximum: 100
                    example: 10
                  nextCursor:
                    description: Record pointer to get items in the next data set
                    type: string
                    minLength: 15
                    maxLength: 15
                    example: H796HJHGANLSADS
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/PageMetaData'
                example:
                  size: 10
                  nextCursor: H796HJHGANLSADS
                  data:
                    - id: 5f328bf0b7c15700071233b9
                      name: HomePage
                      updatedAt: '2021-09-09T21:03:29.617Z'
                      publishedAt: '2021-09-09T21:03:29.617Z'
                      metadata:
                        url: /home
                        channels:
                          - 00SZAU
                          - 02SZCA
                        seoFields:
                          title: SEO
                          description: SEO description
                          metadata:
                            - name: background-color
                              content: white
        '204':
          description: No live pages exist
        '500':
          description: Request was received but an internal error occurred
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                code: INTERNAL_SERVER_ERROR
                message: >-
                  An internal error occurred. If the issue persists please
                  contact [email protected].
  /v2/page/live:
    get:
      summary: Get Live Page for a Channel by URL
      description: Gets live page for the specified page URL and channel
      operationId: getLivePageV2
      tags:
        - Pages
      parameters:
        - in: query
          name: url
          description: Relative page url for which to retrieve the live page version
          required: true
          schema:
            type: string
        - in: query
          name: channels
          description: Comma-separated list of channel IDs
          schema:
            type: string
            default: '12'
        - name: x-site-context
          in: header
          description: >-
            The `x-site-context` header is a JSON object that contains
            information about the source you wish to pull from. The mandatory
            `account` is the 24 character identifier found in Copilot. The
            `channel` (Sales channel ID), `stage` (environment name), and `date`
            attributes can be used to further narrow the scope of your data
            source.
          required: true
          schema:
            type: string
            example: >-
              {"date": "2023-01-01T00:00:00.000Z", "channel": 12, "account":
              "1234abcd5678efgh9ijklmno","stage":"production"}
      responses:
        '200':
          description: Successful operation
          content:
            application/json:
              schema:
                type: object
                description: 200 response object
                properties:
                  status_code:
                    type: integer
                    description: Response status code
                  message:
                    type: string
                    description: Status message
                  data:
                    type: object
                    description: Data object holding the live page and version details
                    properties:
                      page:
                        type: object
                        description: Page details
                        allOf:
                          - $ref: '#/components/schemas/Page'
                          - type: object
                            properties:
                              pageType:
                                type: object
                                description: Details of page type
                                properties:
                                  isDefault:
                                    type: boolean
                                    description: >-
                                      True = page type is default <br /> false =
                                      page type is not default
                                  name:
                                    type: string
                                    description: Name of page type
                                  urlPrefix:
                                    type: string
                                    description: URL prefix associated with page type
                      version:
                        type: array
                        description: Array holding live page version
                        items:
                          type: object
                          description: Version details of the live page
                          allOf:
                            - $ref: '#/components/schemas/PageVersion'
                            - type: object
                              properties:
                                __v:
                                  type: integer
                                  description: versionKey associated with the version
                                startDate:
                                  type: string
                                  format: date-time
                                  description: Timestamp of when version was published
              example:
                status_code: 200
                message: 'Live version: 2446 for page: /components'
                data:
                  page:
                    _id: 613a76a15363f9e9575dc953
                    name: Components
                    pageUrl: /components
                    __v: 0
                    channels:
                      - 00SZAU
                      - 02SZCA
                    createdAt: '2021-09-09T21:03:29.617Z'
                    isActive: true
                    isArchived: false
                    pageId: 1377
                    seoFields:
                      title: SEO
                      description: SEO description
                      _id: 612e4756c4b3c60010fff859
                      metadata:
                        - _id: 612e4756c4b3c60010fff85a
                          name: summary
                          content: Types of components
                          createdAt: '2021-08-31T15:14:30.973Z'
                          updatedAt: '2021-08-31T15:14:30.973Z'
                      createdAt: '2021-08-31T15:14:30.973Z'
                      updatedAt: '2021-08-31T15:14:30.973Z'
                    updatedAt: '2021-10-14T20:31:46.794Z'
                    pageType:
                      isDefault: false
                      name: Product category page
                      urlPrefix: /category
                  version:
                    - _id: 613a76a1fa9449000f6c36c3
                      isArchived: false
                      name: Default
                      channel:
                        - 12
                      channels:
                        - 00SZAU
                        - 02SZCA
                      createdAt: '2021-09-09T21:03:29.712Z'
                      updatedAt: '2021-10-14T20:31:47.369Z'
                      components:
                        _id: 61689237068cae000f12ef90
                        id: AboutUs
                        params:
                          desktopHeroImage:
                            url: https://imgurl.com/path/myPhoto.jpg
                            altText: Custom image
                          aboutUsContent:
                            - text: About us
                              firstText: Our Company
                              secondText: Our mission
                              thirdText: Our values
                              paragraph: false
                              dialog: false
                              components: []
                          components: []
                          additionalProp1: {}
                        order: 1
                        additionalProp1: {}
                      endDate: '2099-12-31T00:00:00.000Z'
                      pageId: 613a76a15363f9e9575dc953
                      status: SCHEDULED
                      versionId: 2446
                      __v: 0
                      startDate: '2021-10-14T20:31:44.052Z'
        '204':
          description: Page is not live or is inactive
          content:
            application/json:
              schema:
                type: object
                description: 204 response object
                properties:
                  status_code:
                    type: integer
                    description: Response status code
                  status:
                    type: string
                    description: Message describing the request
                  message:
                    type: string
                    description: Message describing the result of the response
              examples:
                NoLiveVersion:
                  summary: No Live Versions
                  value:
                    status_code: 204
                    status: 'Live Page: /someUrl'
                    message: >-
                      No live version available for page: /someUrl, status:
                      SCHEDULED, Date: Tue Oct 19 2021 16:18:21 GMT-0400
                      (Eastern Daylight Time), Channel: 02SZCA.
                InactivePage:
                  summary: Inactive Page
                  value:
                    status_code: 204
                    status: 'Live Page: /someUrl'
                    message: >-
                      page: /someUrl is inactive or archived, so there will be
                      no live versions of page.
        '400':
          description: Page url not specified
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                code: REQUEST_VALIDATION
                message: 'Invalid data in query: must have required property URL'
        '404':
          description: Page not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                code: PAGE_NOT_FOUND
                message: No page entry found
        '500':
          description: Request was received but an internal error occurred
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                code: INTERNAL_SERVER_ERROR
                message: >-
                  An internal error occurred. If the issue persists please
                  contact [email protected].
  /v2/global-component/live:
    get:
      summary: Get Live Global Components for a Channel
      description: >-
        Gets a list of all the live global component data for a specified
        channel
      operationId: getLiveGlobalComponentsV2
      tags:
        - Global Components
      parameters:
        - in: query
          name: channels
          description: Comma-separated list of channel IDs
          schema:
            type: string
            default: '12'
        - $ref: '#/components/parameters/XSiteContent'
      responses:
        '200':
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Components'
              examples:
                LiveComponents:
                  $ref: '#/components/examples/globalComponentsExample'
                NoLiveComponents:
                  summary: No Live Components
                  value: []
        '500':
          description: Request was received but an internal error occurred
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                code: INTERNAL_SERVER_ERROR
                message: >-
                  An internal error occurred. Contact [email protected]. if
                  issue persists
  /v2/menu/live:
    get:
      summary: Get Live Menu for a Channel
      description: Gets live menu of the specified channel along with all its menu items
      operationId: getLiveMenuV2
      tags:
        - Menu
      parameters:
        - in: query
          name: nodeId
          description: ID of a specific menu item, associated with a live menu
          schema:
            type: string
        - in: query
          name: parentId
          description: >-
            ID of parent menu item, associated with a live menu, to retrieve its
            sub-menu items
          schema:
            type: string
        - in: query
          name: depth
          description: Depth to traverse when returning menu items
          schema:
            type: integer
        - in: query
          name: channels
          description: Comma-separated list of channel IDs
          schema:
            type: string
            default: '12'
        - in: query
          name: name
          description: Name of a specific menu item, associated with a live menu
          schema:
            type: string
        - $ref: '#/components/parameters/XSiteContent'
      responses:
        '200':
          description: Successful operation
          content:
            application/json:
              schema:
                type: object
                description: 200 response object
                properties:
                  query:
                    type: object
                    description: Details of request query
                    properties:
                      channelId:
                        type: string
                        description: Channel ID specified in the request
                      nodeId:
                        type: string
                        description: Node ID specified in the request
                      parentId:
                        type: string
                        description: Menu parent ID specified in the request
                      depth:
                        type: integer
                        description: Search depth specified in the request
                  menu:
                    type: array
                    description: List of menu items and their details
                    items:
                      type: object
                      description: Menu and/or its menu item details
                      oneOf:
                        - type: object
                          description: Menu and its menu item details
                          properties:
                            name:
                              type: string
                              description: Menu name
                            channels:
                              type: array
                              description: Channel IDs associated with the menu
                              items:
                                type: string
                                description: Channel ID associated with the menu
                            children:
                              $ref: '#/components/schemas/BrowseMenuItem'
                            menuId:
                              type: string
                              description: Database ID for menu
                        - $ref: '#/components/schemas/BrowseMenuItem'
              examples:
                queryByChannelId:
                  summary: Query by Channel ID
                  value:
                    query:
                      channelId: 02SZCA
                    menu:
                      name: Default
                      channels:
                        - 02SZCA
                      children:
                        - url: /books
                          name: Books
                          order: 0
                          images: []
                          nodeId: 6171d995bfdcf11c02a6177f
                          parentId: 6171d977bfdcf11c02a61771
                          children:
                            - url: /books/mystery
                              name: Mystery
                              order: 0
                              nodeId: 6171d9ecbfdcf11c02a617a7
                              parentId: 6171d995bfdcf11c02a6177f
                            - url: /books/sci-fi
                              name: Sci-fi
                              order: 1
                              nodeId: 6171d9f2bfdcf11c02a617ac
                              parentId: 6171d995bfdcf11c02a6177f
                            - url: /books/education
                              name: Education
                              order: 2
                              nodeId: 6171da2fbfdcf11c02a617ba
                              parentId: 6171d995bfdcf11c02a6177f
                        - url: /health-household
                          name: Health & Household
                          order: 1
                          images:
                            - _id: 6171db97bfdcf11c02a6181c
                              order: 1
                              url: https://imageUrl.com/myImage.jpg
                              meta: Custom image
                          params:
                            - _id: 6171db97bfdcf11c02a6181d
                              kind: Category
                              value: Health & Household
                          nodeId: 6171d9b9bfdcf11c02a61791
                          parentId: 6171d977bfdcf11c02a61771
                          children:
                            - url: /health-household/household-supplies
                              name: Household Supplies
                              order: 0
                              nodeId: 6171da4fbfdcf11c02a617ca
                              parentId: 6171d9b9bfdcf11c02a61791
                            - url: /health-household/vision-care
                              name: Vision Care
                              order: 1
                              nodeId: 6171da5bbfdcf11c02a617cf
                              parentId: 6171d9b9bfdcf11c02a61791
                              children:
                                - url: /health-household/vision-care/glasses
                                  name: Reading Glasses
                                  order: 0
                                  nodeId: 6171da7ebfdcf11c02a617e0
                                  parentId: 6171da5bbfdcf11c02a617cf
                                - url: /health-household/vision-care/contacts
                                  name: Contact Lenses
                                  order: 1
                                  nodeId: 6171da8abfdcf11c02a617e5
                                  parentId: 6171da5bbfdcf11c02a617cf
                                - url: /health-household/vision-care/contacts-care
                                  name: Contact Lens Care
                                  order: 2
                                  nodeId: 6171da90bfdcf11c02a617ea
                                  parentId: 6171da5bbfdcf11c02a617cf
                            - url: /health-household/medical
                              name: Medical Supplies & Equipment
                              order: 2
                              nodeId: 6171da67bfdcf11c02a617d4
                              parentId: 6171d9b9bfdcf11c02a61791
                      menuId: 6171d977bfdcf11c02a61771
                queryByNodeId:
                  summary: Query by Nodeid
                  value:
                    query:
                      channelId: 02SZCA
                      nodeId: 6171da5bbfdcf11c02a617cf
                    menu:
                      - url: /health-household/vision-care
                        name: Vision Care
                        order: 1
                        nodeId: 6171da5bbfdcf11c02a617cf
                        parentId: 6171d9b9bfdcf11c02a61791
                        children:
                          - url: /health-household/vision-care/glasses
                            name: Reading Glasses
                            order: 0
                            nodeId: 6171da7ebfdcf11c02a617e0
                            parentId: 6171da5bbfdcf11c02a617cf
                          - url: /health-household/vision-care/contacts
                            name: Contact Lenses
                            order: 1
                            nodeId: 6171da8abfdcf11c02a61

# --- truncated at 32 KB (46 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/fabric-com/refs/heads/main/openapi/fabric-experiences-openapi.yml