{
  "openapi": "3.0.4",
  "info": {
    "title": "Loop54 Engine",
    "description": "Loop54 Search is a learning search engine for e-commerce. It helps online shoppers find what they’re looking for, and allows them to explore a wider range of relevant products in a retailer’s catalogue.",
    "version": "V3"
  },
  "servers": [
    {
      "url": "https://[clientId].54proxy.[region]"
    }
  ],
  "paths": {
    "/search": {
      "post": {
        "tags": [
          "User initiated"
        ],
        "summary": "Perform a search request",
        "description": "Used for performing search requests to the engine.",
        "parameters": [
          {
            "name": "Api-Version",
            "in": "header",
            "description": "What version of the API to use.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "V3"
          },
          {
            "name": "User-Id",
            "in": "header",
            "description": "A unique identifier of the end user that initiated the action.",
            "required": true,
            "schema": {
              "maxLength": 100,
              "type": "string"
            },
            "example": "Luke.Skywalker"
          },
          {
            "name": "User-Ip",
            "in": "header",
            "description": "The IP address of the end user.",
            "schema": {
              "type": "string"
            },
            "example": "127.0.0.1"
          },
          {
            "name": "User-Useragent",
            "in": "header",
            "description": "The User-Agent header sent by the end user.",
            "schema": {
              "type": "string"
            },
            "example": "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0"
          },
          {
            "name": "User-Referer",
            "in": "header",
            "description": "The referer header sent by the end user.",
            "schema": {
              "type": "string"
            },
            "example": "https://www.loop54.com/docs"
          },
          {
            "name": "Lib-Version",
            "in": "header",
            "description": "What library is used to generate this request.",
            "schema": {
              "type": "string"
            },
            "example": "js:2018-01-01"
          },
          {
            "name": "Loop54-key",
            "in": "header",
            "description": "Your API key.",
            "schema": {
              "type": "string"
            },
            "example": "9cdfb439c7876e703e307864c9167a15"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/searchRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful method call.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/searchResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad request. Please check the parameters and content of your request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/errorDetails"
                }
              }
            }
          },
          "401": {
            "description": "You're not authorized to view this content or perform this action.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/errorDetails"
                }
              }
            }
          },
          "404": {
            "description": "The resource could not be found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/errorDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error. Something very bad happened.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/errorDetails"
                }
              }
            }
          }
        }
      }
    },
    "/autoComplete": {
      "post": {
        "tags": [
          "User initiated"
        ],
        "summary": "Find autocompletions for a query",
        "description": "Used for performing autocomplete requests to the engine.",
        "parameters": [
          {
            "name": "Api-Version",
            "in": "header",
            "description": "What version of the API to use.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "V3"
          },
          {
            "name": "User-Id",
            "in": "header",
            "description": "A unique identifier of the end user that initiated the action.",
            "required": true,
            "schema": {
              "maxLength": 100,
              "type": "string"
            },
            "example": "Luke.Skywalker"
          },
          {
            "name": "User-Ip",
            "in": "header",
            "description": "The IP address of the end user.",
            "schema": {
              "type": "string"
            },
            "example": "127.0.0.1"
          },
          {
            "name": "User-Useragent",
            "in": "header",
            "description": "The User-Agent header sent by the end user.",
            "schema": {
              "type": "string"
            },
            "example": "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0"
          },
          {
            "name": "User-Referer",
            "in": "header",
            "description": "The referer header sent by the end user.",
            "schema": {
              "type": "string"
            },
            "example": "https://www.loop54.com/docs"
          },
          {
            "name": "Lib-Version",
            "in": "header",
            "description": "What library is used to generate this request.",
            "schema": {
              "type": "string"
            },
            "example": "js:2018-01-01"
          },
          {
            "name": "Loop54-key",
            "in": "header",
            "description": "Your API key.",
            "schema": {
              "type": "string"
            },
            "example": "9cdfb439c7876e703e307864c9167a15"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/autoCompleteRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful method call.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/autoCompleteResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad request. Please check the parameters and content of your request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/errorDetails"
                }
              }
            }
          },
          "401": {
            "description": "You're not authorized to view this content or perform this action.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/errorDetails"
                }
              }
            }
          },
          "404": {
            "description": "The resource could not be found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/errorDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error. Something very bad happened.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/errorDetails"
                }
              }
            }
          }
        }
      }
    },
    "/createEvents": {
      "post": {
        "tags": [
          "User initiated"
        ],
        "summary": "Create behavior events",
        "description": "Used to signal the engine that the user has exhibited a behavior.",
        "parameters": [
          {
            "name": "Api-Version",
            "in": "header",
            "description": "What version of the API to use.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "V3"
          },
          {
            "name": "User-Id",
            "in": "header",
            "description": "A unique identifier of the end user that initiated the action.",
            "required": true,
            "schema": {
              "maxLength": 100,
              "type": "string"
            },
            "example": "Luke.Skywalker"
          },
          {
            "name": "User-Ip",
            "in": "header",
            "description": "The IP address of the end user.",
            "schema": {
              "type": "string"
            },
            "example": "127.0.0.1"
          },
          {
            "name": "User-Useragent",
            "in": "header",
            "description": "The User-Agent header sent by the end user.",
            "schema": {
              "type": "string"
            },
            "example": "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0"
          },
          {
            "name": "User-Referer",
            "in": "header",
            "description": "The referer header sent by the end user.",
            "schema": {
              "type": "string"
            },
            "example": "https://www.loop54.com/docs"
          },
          {
            "name": "Lib-Version",
            "in": "header",
            "description": "What library is used to generate this request.",
            "schema": {
              "type": "string"
            },
            "example": "js:2018-01-01"
          },
          {
            "name": "Loop54-key",
            "in": "header",
            "description": "Your API key.",
            "schema": {
              "type": "string"
            },
            "example": "9cdfb439c7876e703e307864c9167a15"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/createEventsRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful method call.",
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/response"
                    },
                    {
                      "$ref": "#/components/schemas/autoCompleteResponse"
                    },
                    {
                      "$ref": "#/components/schemas/errorResponse"
                    },
                    {
                      "$ref": "#/components/schemas/getBasketRecommendationsResponse"
                    },
                    {
                      "$ref": "#/components/schemas/getComplementaryEntitiesResponse"
                    },
                    {
                      "$ref": "#/components/schemas/getEntitiesByAttributeResponse"
                    },
                    {
                      "$ref": "#/components/schemas/getEntitiesResponse"
                    },
                    {
                      "$ref": "#/components/schemas/getIndexedAttributesResponse"
                    },
                    {
                      "$ref": "#/components/schemas/getIndexedAttributeValuesResponse"
                    },
                    {
                      "$ref": "#/components/schemas/getRecommendedEntitiesResponse"
                    },
                    {
                      "$ref": "#/components/schemas/getRelatedEntitiesResponse"
                    },
                    {
                      "$ref": "#/components/schemas/searchResponse"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Bad request. Please check the parameters and content of your request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/errorDetails"
                }
              }
            }
          },
          "401": {
            "description": "You're not authorized to view this content or perform this action.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/errorDetails"
                }
              }
            }
          },
          "404": {
            "description": "The resource could not be found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/errorDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error. Something very bad happened.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/errorDetails"
                }
              }
            }
          }
        }
      }
    },
    "/getEntities": {
      "post": {
        "tags": [
          "User initiated"
        ],
        "summary": "Get entities",
        "description": "Used to perform a request to get entities.",
        "parameters": [
          {
            "name": "Api-Version",
            "in": "header",
            "description": "What version of the API to use.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "V3"
          },
          {
            "name": "User-Id",
            "in": "header",
            "description": "A unique identifier of the end user that initiated the action.",
            "required": true,
            "schema": {
              "maxLength": 100,
              "type": "string"
            },
            "example": "Luke.Skywalker"
          },
          {
            "name": "User-Ip",
            "in": "header",
            "description": "The IP address of the end user.",
            "schema": {
              "type": "string"
            },
            "example": "127.0.0.1"
          },
          {
            "name": "User-Useragent",
            "in": "header",
            "description": "The User-Agent header sent by the end user.",
            "schema": {
              "type": "string"
            },
            "example": "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0"
          },
          {
            "name": "User-Referer",
            "in": "header",
            "description": "The referer header sent by the end user.",
            "schema": {
              "type": "string"
            },
            "example": "https://www.loop54.com/docs"
          },
          {
            "name": "Lib-Version",
            "in": "header",
            "description": "What library is used to generate this request.",
            "schema": {
              "type": "string"
            },
            "example": "js:2018-01-01"
          },
          {
            "name": "Loop54-key",
            "in": "header",
            "description": "Your API key.",
            "schema": {
              "type": "string"
            },
            "example": "9cdfb439c7876e703e307864c9167a15"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/getEntitiesRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful method call.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/getEntitiesResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad request. Please check the parameters and content of your request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/errorDetails"
                }
              }
            }
          },
          "401": {
            "description": "You're not authorized to view this content or perform this action.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/errorDetails"
                }
              }
            }
          },
          "404": {
            "description": "The resource could not be found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/errorDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error. Something very bad happened.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/errorDetails"
                }
              }
            }
          }
        }
      }
    },
    "/getComplementaryEntities": {
      "post": {
        "tags": [
          "User initiated"
        ],
        "summary": "Get Complementary entities",
        "description": "Used to perform a request to get entities that are complementary to a selected entity.",
        "parameters": [
          {
            "name": "Api-Version",
            "in": "header",
            "description": "What version of the API to use.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "V3"
          },
          {
            "name": "User-Id",
            "in": "header",
            "description": "A unique identifier of the end user that initiated the action.",
            "required": true,
            "schema": {
              "maxLength": 100,
              "type": "string"
            },
            "example": "Luke.Skywalker"
          },
          {
            "name": "User-Ip",
            "in": "header",
            "description": "The IP address of the end user.",
            "schema": {
              "type": "string"
            },
            "example": "127.0.0.1"
          },
          {
            "name": "User-Useragent",
            "in": "header",
            "description": "The User-Agent header sent by the end user.",
            "schema": {
              "type": "string"
            },
            "example": "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0"
          },
          {
            "name": "User-Referer",
            "in": "header",
            "description": "The referer header sent by the end user.",
            "schema": {
              "type": "string"
            },
            "example": "https://www.loop54.com/docs"
          },
          {
            "name": "Lib-Version",
            "in": "header",
            "description": "What library is used to generate this request.",
            "schema": {
              "type": "string"
            },
            "example": "js:2018-01-01"
          },
          {
            "name": "Loop54-key",
            "in": "header",
            "description": "Your API key.",
            "schema": {
              "type": "string"
            },
            "example": "9cdfb439c7876e703e307864c9167a15"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/getComplementaryEntitiesRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful method call.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/getComplementaryEntitiesResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad request. Please check the parameters and content of your request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/errorDetails"
                }
              }
            }
          },
          "401": {
            "description": "You're not authorized to view this content or perform this action.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/errorDetails"
                }
              }
            }
          },
          "404": {
            "description": "The resource could not be found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/errorDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error. Something very bad happened.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/errorDetails"
                }
              }
            }
          }
        }
      }
    },
    "/getBasketRecommendations": {
      "post": {
        "tags": [
          "User initiated"
        ],
        "summary": "Get basket recommendations",
        "description": "Used to perform a request to get recommendations for a set of product ids.",
        "parameters": [
          {
            "name": "Api-Version",
            "in": "header",
            "description": "What version of the API to use.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "V3"
          },
          {
            "name": "User-Id",
            "in": "header",
            "description": "A unique identifier of the end user that initiated the action.",
            "required": true,
            "schema": {
              "maxLength": 100,
              "type": "string"
            },
            "example": "Luke.Skywalker"
          },
          {
            "name": "User-Ip",
            "in": "header",
            "description": "The IP address of the end user.",
            "schema": {
              "type": "string"
            },
            "example": "127.0.0.1"
          },
          {
            "name": "User-Useragent",
            "in": "header",
            "description": "The User-Agent header sent by the end user.",
            "schema": {
              "type": "string"
            },
            "example": "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0"
          },
          {
            "name": "User-Referer",
            "in": "header",
            "description": "The referer header sent by the end user.",
            "schema": {
              "type": "string"
            },
            "example": "https://www.loop54.com/docs"
          },
          {
            "name": "Lib-Version",
            "in": "header",
            "description": "What library is used to generate this request.",
            "schema": {
              "type": "string"
            },
            "example": "js:2018-01-01"
          },
          {
            "name": "Loop54-key",
            "in": "header",
            "description": "Your API key.",
            "schema": {
              "type": "string"
            },
            "example": "9cdfb439c7876e703e307864c9167a15"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/getBasketRecommendationsRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful method call.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/getBasketRecommendationsResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad request. Please check the parameters and content of your request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/errorDetails"
                }
              }
            }
          },
          "401": {
            "description": "You're not authorized to view this content or perform this action.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/errorDetails"
                }
              }
            }
          },
          "404": {
            "description": "The resource could not be found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/errorDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error. Something very bad happened.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/errorDetails"
                }
              }
            }
          }
        }
      }
    },
    "/getRecommendedEntities": {
      "post": {
        "tags": [
          "User initiated"
        ],
        "summary": "Get recommendations",
        "description": "Used to perform a request to get personalized recommendations.",
        "parameters": [
          {
            "name": "Api-Version",
            "in": "header",
            "description": "What version of the API to use.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "V3"
          },
          {
            "name": "User-Id",
            "in": "header",
            "description": "A unique identifier of the end user that initiated the action.",
            "required": true,
            "schema": {
              "maxLength": 100,
              "type": "string"
            },
            "example": "Luke.Skywalker"
          },
          {
            "name": "User-Ip",
            "in": "header",
            "description": "The IP address of the end user.",
            "schema": {
              "type": "string"
            },
            "example": "127.0.0.1"
          },
          {
            "name": "User-Useragent",
            "in": "header",
            "description": "The User-Agent header sent by the end user.",
            "schema": {
              "type": "string"
            },
            "example": "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0"
          },
          {
            "name": "User-Referer",
            "in": "header",
            "description": "The referer header sent by the end user.",
            "schema": {
              "type": "string"
            },
            "example": "https://www.loop54.com/docs"
          },
          {
            "name": "Lib-Version",
            "in": "header",
            "description": "What library is used to generate this request.",
            "schema": {
              "type": "string"
            },
            "example": "js:2018-01-01"
          },
          {
            "name": "Loop54-key",
            "in": "header",
            "description": "Your API key.",
            "schema": {
              "type": "string"
            },
            "example": "9cdfb439c7876e703e307864c9167a15"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/getRecommendedEntitiesRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful method call.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/getRecommendedEntitiesResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad request. Please check the parameters and content of your request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/errorDetails"
                }
              }
            }
          },
          "401": {
            "description": "You're not authorized to view this content or perform this action.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/errorDetails"
                }
              }
            }
          },
          "404": {
            "description": "The resource could not be found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/errorDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error. Something very bad happened.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/errorDetails"
                }
              }
            }
          }
        }
      }
    },
    "/getRelatedEntities": {
      "post": {
        "tags": [
          "User initiated"
        ],
        "summary": "Get related entities",
        "description": "Used to perform a request to get entities related to a selected entity.",
        "parameters": [
          {
            "name": "Api-Version",
            "in": "header",
            "description": "What version of the API to use.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "V3"
          },
          {
            "name": "User-Id",
            "in": "header",
            "description": "A unique identifier of the end user that initiated the action.",
            "required": true,
            "schema": {
              "maxLength": 100,
              "type": "string"
            },
            "example": "Luke.Skywalker"
          },
          {
            "name": "User-Ip",
            "in": "header",
            "description": "The IP address of the end user.",
            "schema": {
              "type": "string"
            },
            "example": "127.0.0.1"
          },
          {
            "name": "User-Useragent",
            "in": "header",
            "description": "The User-Agent header sent by the end user.",
            "schema": {
              "type": "string"
            },
            "example": "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0"
          },
          {
            "name": "User-Referer",
            "in": "header",
            "description": "The referer header sent by the end user.",
            "schema": {
              "type": "string"
            },
            "example": "https://www.loop54.com/docs"
          },
          {
            "name": "Lib-Version",
            "in": "header",
            "description": "What library is used to generate this request.",
            "schema": {
              "type": "string"
            },
            "example": "js:2018-01-01"
          },
          {
            "name": "Loop54-key",
            "in": "header",
            "description": "Your API key.",
            "schema": {
              "type": "string"
            },
            "example": "9cdfb439c7876e703e307864c9167a15"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/getRelatedEntitiesRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful method call.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/getRelatedEntitiesResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad request. Please check the parameters and content of your request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/errorDetails"
                }
              }
            }
          },
          "401": {
            "description": "You're not authorized to view this content or perform this action.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/errorDetails"
                }
              }
            }
          },
          "404": {
            "description": "The resource could not be found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/errorDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error. Something very bad happened.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/errorDetails"
                }
              }
            }
          }
        }
      }
    },
    "/getPopularEntities": {
      "post": {
        "tags": [
          "User initiated"
        ],
        "summary": "Get popular entities",
        "description": "Used to perform a request to get entities that a user (or all users) most commonly interacted with or navigated to.",
        "parameters": [
          {
            "name": "Api-Version",
            "in": "header",
            "description": "What version of the API to use.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "V3"
          },
          {
            "name": "User-Id",
            "in": "header",
            "description": "A unique identifier of the end user that initiated the action.",
            "required": true,
            "schema": {
              "maxLength": 100,
              "type": "string"
            },
            "example": "Luke.Skywalker"
          },
          {
            "name": "User-Ip",
            "in": "header",
            "description": "The IP address of the end user.",
            "schema": {
              "type": "string"
            },
            "example": "127.0.0.1"
          },
          {
            "name": "User-Useragent",
            "in": "header",
            "description": "The User-Agent header sent by the end user.",
            "schema": {
              "type": "string"
            },
            "example": "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0"
          },
          {
            "name": "User-Referer",
            "in": "header",
            "description": "The referer header sent by the end user.",
            "schema": {
              "type": "string"
            },
            "example": "https://www.loop54.com/docs"
          },
          {
            "name": "Lib-Version",
            "in": "header",
            "description": "What library is used to generate this request.",
            "schema": {
              "type": "string"
            },
            "example": "js:2018-01-01"
          },
          {
            "name": "Loop54-key",
            "in": "header",
            "description": "Your API key.",
            "schema": {
              "type": "string"
            },
            "example": "9cdfb439c7876e703e307864c9167a15"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/getPopularEntitiesRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful method call.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/getEntitiesResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad request. Please check the parameters and content of your request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/errorDetails"
                }
              }
            }
          },
          "401": {
            "description": "You're not authorized to view this content or perform this action.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/errorDetails"
                }
              }
            }
          },
          "404": {
            "description": "The resource could not be found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/errorDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error. Something very bad happened.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/errorDetails"
                }
              }
            }
          }
        }
      }
    },
    "/getRecentEntities": {
      "post": {
        "tags": [
          "User initiated"
        ],
        "summary": "Get recent entities",
        "description": "Used to perform a request to get entities that a user (or all users) most recently interacted with or navigated to.",
        "parameters": [
          {
            "name": "Api-Version",
            "in": "header",
            "description": "What version of the API to use.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "V3"
          },
          {
            "name": "User-Id",
            "in": "header",
            "description": "A unique identifier of the end user that initiated the action.",
            "required": true,
            "schema": {
              "maxLength": 100,
              "type": "string"
            },
            "example": "Luke.Skywalker"
          },
          {
            "name": "User-Ip",
            "in": "header",
            "description": "The IP address of the end user.",
            "schema": {
              "type": "string"
            },
            "example": "127.0.0.1"
          },
          {
            "name": "User-Useragent",
            "in": "header",
            "description": "The User-Agent header sent by the end user.",
            "schema": {
              "type": "string"
            },
            "example": "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0"
          },
          {
            "name": "User-Referer",
            "in": "header",
            "description": "The referer header sent by the end user.",
            "schema": {
              "type": "string"
            },
            "example": "https://www.loop54.com/docs"
          },
          {
            "name": "Lib-Version",
            "in": "header",
            "description": "What library is used to generate this request.",
            "schema": {
              "type": "string"
            },
            "example": "js:2018-01-01"
          },
          {
            "name": "Loop54-key",
            "in": "header",
            "description": "Your API key.",
            "schema": {
              "type": "string"
            },
            "example": "9cdfb439c7876e703e307864c9167a15"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/getRecentEntitiesRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful method call.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/getEntitiesResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad request. Please check the parameters and content of your request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/errorDetails"
                }
              }
            }
          },
          "401": {
            "description": "You're not authorized to view this content or perform this action.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/errorDetails"
                }
              }
            }
          },
          "404": {
            "description": "The resource could not be found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/errorDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error. Something very bad happened.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/errorDetails"
                }
              }
            }
          }
        }
      }
    },
    "/getEntitiesByAttribute": {
      "post": {
        "tags": [
          "User initiated"
        ],
        "summary": "Get entities by indexed attribute",
        "description": "Used to perform a request to get entities with an indexed string attribute. For attributes that are not indexed, use GetEntities with a filter instead. To find out what attributes are indexed in the engine call /getIndexedAttributes. To find out what values are available call /getIndexedAttributeValues. ",
        "parameters": [
          {
            "name": "Api-Version",
            "in": "header",
            "description": "What version of the API to use.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "V3"
          },
          {
            "name": "User-Id",
            "in": "header",
            "description": "A unique identifier of the end user that initiated the action.",
            "required": true,
            "schema": {
              "maxLength": 100,
              "type": "string"
            },
            "example": "Luke.Skywalker"
          },
          {
            "name": "User-Ip",
            "in": "header",
            "description": "The IP address of the end user.",
            "schema": {
              "type": "string"
            },
            "example": "127.0.0.1"
          },
          {
            "name": "User-Useragent",
            "in": "header",
            "description": "The User-Agent header sent by the end user.",
            "schema": {
              "type": "string"
            },
            "example": "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0"
          },
          {
            "name": "User-Referer",
            "in": "header",
            "description": "The referer header sent by the end user.",
            "schema": {
              "type": "string"
            },
            "example": "https://www.loop54.com/docs"
          },
          {
            "name": "Lib-Version",
            "in": "header",
            "description": "What library is used to generate this request.",
            "schema": {
              "type": "string"
            },
            "example": "js:2018-01-01"
          },
          {
            "name": "Loop54-key",
            "in": "header",
            "description": "Your API key.",
            "schema": {
              "type": "string"
            },
            "example": "9cdfb439c7876e703e307864c9167a15"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/getEntitiesByAttributeRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful method call.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/getEntitiesByAttributeResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad request. Please check the parameters and content of your request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/errorDetails"
                }
              }
            }
          },
          "401": {
            "description": "You're not authorized to view this content or perform this action.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/errorDetails"
                }
              }
            }
          },
          "404": {
            "description": "The resource could not be found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/errorDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error. Something very bad happened.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/errorDetails"
                }
              }
            }
          }
        }
      }
    },
    "/getIndexedAttributes": {
      "post": {
        "tags": [
          "Administrative"
        ],
        "summary": "Get indexed attributes",
        "description": "Used to perform a request to get information about attributes, indexed and non-indexed.",
        "parameters": [
          {
            "name": "Api-Version",
            "in": "header",
            "description": "What version of the API to use.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "V3"
          },
          {
            "name": "Loop54-key",
            "in": "header",
            "description": "Your API key.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "9cdfb439c7876e703e307864c9167a15"
          },
          {
            "name": "Lib-Version",
            "in": "header",
            "description": "What library is used to generate this request.",
            "schema": {
              "type": "string"
            },
            "example": "js:2018-01-01"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/getIndexedAttributesRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful method call.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/getIndexedAttributesResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad request. Please check the parameters and content of your request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/errorDetails"
                }
              }
            }
          },
          "401": {
            "description": "You're not authorized to view this content or perform this action.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/errorDetails"
                }
              }
            }
          },
          "404": {
            "description": "The resource could not be found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/errorDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error. Something very bad happened.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/errorDetails"
                }
              }
            }
          }
        }
      }
    },
    "/getIndexedAttributeValues": {
      "post": {
        "tags": [
          "Administrative"
        ],
        "summary": "Get indexed attribute values",
        "description": "Used to perform a request to get a list of all unique values that are indexed for the provided attribute. To find out what attributes are indexed in the engine call /getIndexedAttributes.",
        "parameters": [
          {
            "name": "Api-Version",
            "in": "header",
            "description": "What version of the API to use.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "V3"
          },
          {
            "name": "Loop54-key",
            "in": "header",
            "description": "Your API key.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "9cdfb439c7876e703e307864c9167a15"
          },
          {
            "name": "Lib-Version",
            "in": "header",
            "description": "What library is used to generate this request.",
            "schema": {
              "type": "string"
            },
            "example": "js:2018-01-01"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/getIndexedAttributeValuesRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful method call.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/getIndexedAttributeValuesResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad request. Please check the parameters and content of your request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/errorDetails"
                }
              }
            }
          },
          "401": {
            "description": "You're not authorized to view this content or perform this action.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/errorDetails"
                }
              }
            }
          },
          "404": {
            "description": "The resource could not be found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/errorDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error. Something very bad happened.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/errorDetails"
                }
              }
            }
          }
        }
      }
    },
    "/sync": {
      "post": {
        "tags": [
          "Administrative"
        ],
        "summary": "Perform full sync",
        "description": "Used for telling the engine to re-sync the catalog.",
        "parameters": [
          {
            "name": "Api-Version",
            "in": "header",
            "description": "What version of the API to use.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "V3"
          },
          {
            "name": "Loop54-key",
            "in": "header",
            "description": "Your API key.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "9cdfb439c7876e703e307864c9167a15"
          },
          {
            "name": "Lib-Version",
            "in": "header",
            "description": "What library is used to generate this request.",
            "schema": {
              "type": "string"
            },
            "example": "js:2018-01-01"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/syncRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful method call.",
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/response"
                    },
                    {
                      "$ref": "#/components/schemas/autoCompleteResponse"
                    },
                    {
                      "$ref": "#/components/schemas/errorResponse"
                    },
                    {
                      "$ref": "#/components/schemas/getBasketRecommendationsResponse"
                    },
                    {
                      "$ref": "#/components/schemas/getComplementaryEntitiesResponse"
                    },
                    {
                      "$ref": "#/components/schemas/getEntitiesByAttributeResponse"
                    },
                    {
                      "$ref": "#/components/schemas/getEntitiesResponse"
                    },
                    {
                      "$ref": "#/components/schemas/getIndexedAttributesResponse"
                    },
                    {
                      "$ref": "#/components/schemas/getIndexedAttributeValuesResponse"
                    },
                    {
                      "$ref": "#/components/schemas/getRecommendedEntitiesResponse"
                    },
                    {
                      "$ref": "#/components/schemas/getRelatedEntitiesResponse"
                    },
                    {
                      "$ref": "#/components/schemas/searchResponse"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Bad request. Please check the parameters and content of your request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/errorDetails"
                }
              }
            }
          },
          "401": {
            "description": "You're not authorized to view this content or perform this action.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/errorDetails"
                }
              }
            }
          },
          "404": {
            "description": "The resource could not be found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/errorDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error. Something very bad happened.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/errorDetails"
                }
              }
            }
          }
        }
      }
    },
    "/{requestName}": {
      "post": {
        "tags": [
          "Other"
        ],
        "summary": "Custom Request",
        "description": "Used to trigger predefined client-specific actions.",
        "parameters": [
          {
            "name": "Api-Version",
            "in": "header",
            "description": "What version of the API to use.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "V3"
          },
          {
            "name": "Loop54-key",
            "in": "header",
            "description": "Your API key.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "9cdfb439c7876e703e307864c9167a15"
          },
          {
            "name": "Lib-Version",
            "in": "header",
            "description": "What library is used to generate this request.",
            "schema": {
              "type": "string"
            },
            "example": "js:2018-01-01"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/customRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful method call.",
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/response"
                    },
                    {
                      "$ref": "#/components/schemas/autoCompleteResponse"
                    },
                    {
                      "$ref": "#/components/schemas/errorResponse"
                    },
                    {
                      "$ref": "#/components/schemas/getBasketRecommendationsResponse"
                    },
                    {
                      "$ref": "#/components/schemas/getComplementaryEntitiesResponse"
                    },
                    {
                      "$ref": "#/components/schemas/getEntitiesByAttributeResponse"
                    },
                    {
                      "$ref": "#/components/schemas/getEntitiesResponse"
                    },
                    {
                      "$ref": "#/components/schemas/getIndexedAttributesResponse"
                    },
                    {
                      "$ref": "#/components/schemas/getIndexedAttributeValuesResponse"
                    },
                    {
                      "$ref": "#/components/schemas/getRecommendedEntitiesResponse"
                    },
                    {
                      "$ref": "#/components/schemas/getRelatedEntitiesResponse"
                    },
                    {
                      "$ref": "#/components/schemas/searchResponse"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Bad request. Please check the parameters and content of your request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/errorDetails"
                }
              }
            }
          },
          "401": {
            "description": "You're not authorized to view this content or perform this action.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/errorDetails"
                }
              }
            }
          },
          "404": {
            "description": "The resource could not be found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/errorDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error. Something very bad happened.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/errorDetails"
                }
              }
            }
          }
        }
      },
      "parameters": [
        {
          "name": "requestName",
          "in": "path",
          "description": "Which action to trigger",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ]
    }
  },
  "components": {
    "schemas": {
      "entitySortingParameter": {
        "title": "entitySortingParameter",
        "type": "object",
        "properties": {
          "type": {
            "enum": [
              "attribute",
              "id",
              "type",
              "relevance",
              "popularity"
            ],
            "type": "string",
            "description": "How the sorting is done. Defaults to \"relevance\".",
            "default": "relevance",
            "example": "attribute"
          },
          "attributeName": {
            "type": "string",
            "description": "If the type is set to \"attribute\" this property decides which attribute on the entity to sort by. When an attribute is missing from an entity, or has a null value, that entity will always be ordered last, no matter whether the sorting parameter is defined as ascending or descending. All entities with null, empty or missing attributes are considered equal.",
            "example": "category"
          },
          "order": {
            "enum": [
              "asc",
              "desc"
            ],
            "type": "string",
            "description": "Whether to sort descending or ascending. Defaults to \"descending\".",
            "default": "desc",
            "example": "asc"
          }
        },
        "description": "Object determining how a result list should be sorted. "
      },
      "facetParameter": {
        "title": "facetParameter",
        "required": [
          "attributeName"
        ],
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Name of the facet to return to the client. Can be a 'friendly' name to show to the user.",
            "example": "categoryFacet"
          },
          "attributeName": {
            "type": "string",
            "description": "The name of the attribute on the entities to facet the result on. If the attribute does not exist on any entity, all entities will pass and an empty facet will be returned.",
            "example": "category"
          },
          "type": {
            "enum": [
              "distinct",
              "range"
            ],
            "type": "string",
            "description": "Type of the facet. Range or Distinct.",
            "default": "distinct",
            "example": "distinct"
          }
        },
        "description": "Used for faceting an entity collection based on the attributes of the entities."
      },
      "distinctFacetItemSortingParameter": {
        "title": "distinctFacetItemSortingParameter",
        "type": "object",
        "properties": {
          "type": {
            "enum": [
              "item",
              "count",
              "selected"
            ],
            "type": "string",
            "description": "How the sorting is done.",
            "default": "count",
            "example": "item"
          },
          "order": {
            "enum": [
              "asc",
              "desc"
            ],
            "type": "string",
            "description": "Whether to sort items descending or ascending.",
            "default": "desc",
            "example": "asc"
          }
        },
        "description": "Describes how to sort the items returned in the facet."
      },
      "distinctFacetParameter": {
        "title": "distinctFacetParameter",
        "allOf": [
          {
            "$ref": "#/components/schemas/facetParameter"
          },
          {
            "title": "distinctFacetParameter",
            "required": [
              "attributeName"
            ],
            "type": "object",
            "properties": {
              "selected": {
                "type": "array",
                "items": {
                  "oneOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "number"
                    },
                    {
                      "type": "integer"
                    },
                    {
                      "type": "boolean"
                    }
                  ]
                },
                "description": "An array containing the selected values. Only entities belonging to these will be returned. If not set, no filtering is done.",
                "example": [
                  "AT walkers"
                ]
              },
              "sortBy": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/distinctFacetItemSortingParameter"
                },
                "description": "Array of sorting parameters specifying how the facet items should be sorted. The first sorting parameter specifies the primary order. If items are equal, they will be sorted using the second parameter, and so on. Default: sort by descending count."
              }
            },
            "description": "Used for faceting an entity collection with a collection of attribute values."
          }
        ],
        "description": "Used for faceting an entity collection with a collection of attribute values."
      },
      "rangeFacetSelectedParameter": {
        "title": "rangeFacetSelectedParameter",
        "type": "object",
        "properties": {
          "min": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              },
              {
                "type": "integer"
              },
              {
                "type": "boolean"
              }
            ],
            "description": "The lower value of the range, comparison is inclusive",
            "example": 20
          },
          "max": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              },
              {
                "type": "integer"
              },
              {
                "type": "boolean"
              }
            ],
            "description": "The upper value of the range, comparison is inclusive",
            "example": 99
          }
        },
        "description": "Used for selecting which max and min value to filter the results based on this facet."
      },
      "rangeFacetParameter": {
        "title": "rangeFacetParameter",
        "allOf": [
          {
            "$ref": "#/components/schemas/facetParameter"
          },
          {
            "title": "rangeFacetParameter",
            "required": [
              "attributeName"
            ],
            "type": "object",
            "properties": {
              "selected": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/rangeFacetSelectedParameter"
                  }
                ],
                "description": "The range that the returned entities should be between. If not set, no filtering is done."
              }
            },
            "description": "Used for faceting an entity collection with a range (maximum value and minimum value)"
          }
        ],
        "description": "Used for faceting an entity collection with a range (maximum value and minimum value)"
      },
      "filterParameter": {
        "title": "filterParameter",
        "type": "object",
        "description": "Used for filtering entities."
      },
      "attributeExistsFilterParameter": {
        "title": "attributeExistsFilterParameter",
        "allOf": [
          {
            "$ref": "#/components/schemas/filterParameter"
          },
          {
            "title": "attributeExistsFilterParameter",
            "required": [
              "attributeName"
            ],
            "type": "object",
            "properties": {
              "attributeName": {
                "type": "string",
                "description": "The attribute to look for.",
                "example": "category"
              }
            },
            "description": "Used for filtering entities that have a certain attribute, regardless of the value."
          }
        ],
        "description": "Used for filtering entities that have a certain attribute, regardless of the value."
      },
      "attributeFilterParameter": {
        "title": "attributeFilterParameter",
        "allOf": [
          {
            "$ref": "#/components/schemas/filterParameter"
          },
          {
            "title": "attributeFilterParameter",
            "required": [
              "type",
              "value"
            ],
            "type": "object",
            "properties": {
              "type": {
                "enum": [
                  "attribute",
                  "type",
                  "id"
                ],
                "type": "string",
                "description": "Type of the filter. Attribute, Id or Type. If the type of the filter is Attribute, the name of the attribute needs to be specified in the AttributeName property.",
                "example": "attribute"
              },
              "attributeName": {
                "type": "string",
                "description": "If the type of filter is Attribute, the name of the attribute needs to be specified here.",
                "example": "category"
              },
              "value": {
                "oneOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "number"
                  },
                  {
                    "type": "integer"
                  },
                  {
                    "type": "boolean"
                  }
                ],
                "description": "The value to filter on.",
                "example": "AT walkers"
              },
              "comparisonMode": {
                "enum": [
                  "equals",
                  "greaterThan",
                  "greaterThanOrEquals",
                  "lessThan",
                  "lessThanOrEquals",
                  "contains"
                ],
                "type": "string",
                "description": "Defines the comparison mode to use when filtering.",
                "default": "equals",
                "example": "greaterThan"
              }
            },
            "description": "Used for filtering entities that have a certain attribute value."
          }
        ],
        "description": "Used for filtering entities that have a certain attribute value."
      },
      "inverseFilterParameter": {
        "title": "inverseFilterParameter",
        "allOf": [
          {
            "$ref": "#/components/schemas/filterParameter"
          },
          {
            "title": "inverseFilterParameter",
            "required": [
              "not"
            ],
            "type": "object",
            "properties": {
              "not": {
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/attributeExistsFilterParameter"
                  },
                  {
                    "$ref": "#/components/schemas/attributeFilterParameter"
                  },
                  {
                    "$ref": "#/components/schemas/inverseFilterParameter"
                  },
                  {
                    "$ref": "#/components/schemas/andFilterParameter"
                  },
                  {
                    "$ref": "#/components/schemas/orFilterParameter"
                  }
                ],
                "description": "The filter that should be inversed."
              }
            },
            "description": "Used for inverting a filter."
          }
        ],
        "description": "Used for inverting a filter."
      },
      "andFilterParameter": {
        "title": "andFilterParameter",
        "allOf": [
          {
            "$ref": "#/components/schemas/filterParameter"
          },
          {
            "title": "andFilterParameter",
            "required": [
              "and"
            ],
            "type": "object",
            "properties": {
              "and": {
                "type": "array",
                "items": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/attributeExistsFilterParameter"
                    },
                    {
                      "$ref": "#/components/schemas/attributeFilterParameter"
                    },
                    {
                      "$ref": "#/components/schemas/inverseFilterParameter"
                    },
                    {
                      "$ref": "#/components/schemas/andFilterParameter"
                    },
                    {
                      "$ref": "#/components/schemas/orFilterParameter"
                    }
                  ]
                },
                "description": "An array containing the filters that should be combined."
              }
            },
            "description": "Used for combining two or more filters using and logic."
          }
        ],
        "description": "Used for combining two or more filters using and logic."
      },
      "orFilterParameter": {
        "title": "orFilterParameter",
        "allOf": [
          {
            "$ref": "#/components/schemas/filterParameter"
          },
          {
            "title": "orFilterParameter",
            "required": [
              "or"
            ],
            "type": "object",
            "properties": {
              "or": {
                "type": "array",
                "items": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/attributeExistsFilterParameter"
                    },
                    {
                      "$ref": "#/components/schemas/attributeFilterParameter"
                    },
                    {
                      "$ref": "#/components/schemas/inverseFilterParameter"
                    },
                    {
                      "$ref": "#/components/schemas/andFilterParameter"
                    },
                    {
                      "$ref": "#/components/schemas/orFilterParameter"
                    }
                  ]
                },
                "description": "An array containing the filters that should be combined."
              }
            },
            "description": "Used for combining two or more filters using or logic."
          }
        ],
        "description": "Used for combining two or more filters using or logic."
      },
      "entityCollectionParameters": {
        "title": "entityCollectionParameters",
        "type": "object",
        "properties": {
          "skip": {
            "maximum": 2147483647,
            "minimum": 0,
            "type": "integer",
            "description": "How many entities to skip when paging the result.",
            "default": 0,
            "example": 0
          },
          "take": {
            "maximum": 5000,
            "minimum": 0,
            "type": "integer",
            "description": "How many entities to take when paging the result.",
            "default": 5,
            "example": 42
          },
          "sortBy": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/entitySortingParameter"
            },
            "description": "Array of sorting parameters specifying how the result should be sorted. The first sorting parameter specifies the primary order. If items are equal, they will be sorted using the second parameter, and so on. \n\nThe last two sorting parameters will always be descending relevance followed by ascending ID. These are added onto whatever sorting parameters are requested, such that any requested parameters get priority over those. \n\nAs a general rule, you can let Loop54 deal with relevance; things will be sorted the way you ask them to, but if there is ever a choice where both options are equally valid according to the request, the more relevant result will come first. \n\nConcrete example to make this more clear: if you are selling podracers and your users want to sort them by number of engines, then all you need to pass in is the parameter to sort by ascending engine count. Loop54 will ensure that models with one engine will be shown first, in order of relevance; then all models with two engines, most relevant first again; and so on. \n\nID is used simply as a tiebreaker to get deterministic results (which is useful for pagination, among other things). \n\nFor getPopularEntities and getRecentEntities requests 'relevance' means 'popularity' and 'recency' respectively."
          },
          "facets": {
            "type": "array",
            "items": {
              "oneOf": [
                {
                  "$ref": "#/components/schemas/distinctFacetParameter"
                },
                {
                  "$ref": "#/components/schemas/rangeFacetParameter"
                }
              ]
            },
            "description": "Array of facets to calculate and possibly filter the result on. If not set, no faceting is done."
          },
          "filter": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/attributeExistsFilterParameter"
              },
              {
                "$ref": "#/components/schemas/attributeFilterParameter"
              },
              {
                "$ref": "#/components/schemas/inverseFilterParameter"
              },
              {
                "$ref": "#/components/schemas/andFilterParameter"
              },
              {
                "$ref": "#/components/schemas/orFilterParameter"
              }
            ],
            "description": "How the results should be filtered. If not set, no filtering is done."
          }
        },
        "description": "Specifies how a collection of entities should be paged, filtered, sorted and faceted."
      },
      "querySortingParameter": {
        "title": "querySortingParameter",
        "required": [
          "type"
        ],
        "type": "object",
        "properties": {
          "type": {
            "enum": [
              "relevance",
              "popularity",
              "alphabetic"
            ],
            "type": "string",
            "description": "What property of the queries to use for sorting.",
            "default": "relevance",
            "example": "popularity"
          },
          "order": {
            "enum": [
              "asc",
              "desc"
            ],
            "type": "string",
            "description": "The direction of sort.",
            "default": "desc",
            "example": "asc"
          }
        },
        "description": "Used for sorting a collection of queries."
      },
      "queryCollectionParameters": {
        "title": "queryCollectionParameters",
        "type": "object",
        "properties": {
          "skip": {
            "maximum": 2147483647,
            "minimum": 0,
            "type": "integer",
            "description": "How many strings to skip when paging the result.",
            "default": 0,
            "example": 0
          },
          "take": {
            "maximum": 5000,
            "minimum": 0,
            "type": "integer",
            "description": "How many strings to take when paging the result.",
            "default": 5,
            "example": 42
          },
          "sortBy": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/querySortingParameter"
            },
            "description": "Array of sorting parameters specifying how the resulting queries should be sorted. The first sorting parameter specifies the primary order. If items are equal, they will be sorted using the second parameter, and so on. Default: sort by descending relevance."
          }
        },
        "description": "Used for setting parameters for which queries to return in a collection."
      },
      "searchRequest": {
        "title": "searchRequest",
        "required": [
          "query"
        ],
        "type": "object",
        "properties": {
          "query": {
            "maxLength": 300,
            "type": "string",
            "description": "The query to search for.",
            "example": "forest fighting equipment"
          },
          "resultsOptions": {
            "allOf": [
              {
                "$ref": "#/components/schemas/entityCollectionParameters"
              }
            ],
            "description": "Parameters for specifying which results to retrieve."
          },
          "relatedResultsOptions": {
            "allOf": [
              {
                "$ref": "#/components/schemas/entityCollectionParameters"
              }
            ],
            "description": "Parameters for specifying which related results to retrieve."
          },
          "spellingSuggestionsOptions": {
            "allOf": [
              {
                "$ref": "#/components/schemas/queryCollectionParameters"
              }
            ],
            "description": "Parameters for specifying which spelling suggestions to retrieve."
          },
          "relatedQueriesOptions": {
            "allOf": [
              {
                "$ref": "#/components/schemas/queryCollectionParameters"
              }
            ],
            "description": "Parameters for specifying which related queries to retrieve."
          },
          "customData": {
            "type": "object",
            "additionalProperties": {
              "oneOf": [
                {
                  "type": "string"
                },
                {
                  "type": "number"
                },
                {
                  "type": "integer"
                },
                {
                  "type": "boolean"
                }
              ]
            },
            "description": "Any additional, non-standard, data. Contact support for information about how and when to use this."
          }
        },
        "description": "Used for performing search requests to the engine."
      },
      "autoCompleteRequest": {
        "title": "autoCompleteRequest",
        "required": [
          "query"
        ],
        "type": "object",
        "properties": {
          "query": {
            "maxLength": 300,
            "type": "string",
            "description": "The query to find suggestions.",
            "example": "forest fighting equip"
          },
          "queriesOptions": {
            "allOf": [
              {
                "$ref": "#/components/schemas/queryCollectionParameters"
              }
            ],
            "description": "Parameters for specifying which query suggestions to retrieve."
          },
          "customData": {
            "type": "object",
            "additionalProperties": {
              "oneOf": [
                {
                  "type": "string"
                },
                {
                  "type": "number"
                },
                {
                  "type": "integer"
                },
                {
                  "type": "boolean"
                }
              ]
            },
            "description": "Any additional, non-standard, data. Contact support for information about how and when to use this."
          }
        },
        "description": "Used for performing autocomplete requests to the engine."
      },
      "entity": {
        "title": "entity",
        "required": [
          "type",
          "id"
        ],
        "type": "object",
        "properties": {
          "type": {
            "maxLength": 100,
            "type": "string",
            "description": "The type of Entity.",
            "example": "Product"
          },
          "id": {
            "maxLength": 300,
            "type": "string",
            "description": "The unique identifier for the Entity, given this Entity type.",
            "example": "MSE-6"
          },
          "attributes": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string",
                  "description": "The name of this Entity attribute.",
                  "example": "title"
                },
                "type": {
                  "enum": [
                    "string",
                    "number",
                    "integer",
                    "boolean",
                    "object",
                    "array",
                    "date"
                  ],
                  "type": "string",
                  "description": "The type of data in this Entity attribute.",
                  "example": "string"
                },
                "values": {
                  "type": "array",
                  "items": {
                    "oneOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "number"
                      },
                      {
                        "type": "integer"
                      },
                      {
                        "type": "boolean"
                      }
                    ]
                  },
                  "description": "The values for this Entity attribute. The data type must match the \"type\" property.",
                  "example": [
                    "MSE-6-series repair droid"
                  ]
                }
              }
            },
            "description": "An array of attributes for this particular Entity."
          }
        },
        "description": "The core object used to model products, categories, brands, etc, in the engine."
      },
      "event": {
        "title": "event",
        "required": [
          "type",
          "entity"
        ],
        "type": "object",
        "properties": {
          "type": {
            "maxLength": 100,
            "type": "string",
            "description": "The type of interaction triggered by the user. Typically \"click\", \"addtocart\" or \"purchase\".",
            "example": "purchase"
          },
          "entity": {
            "allOf": [
              {
                "$ref": "#/components/schemas/entity"
              }
            ],
            "description": "The product or other entity the user interacted with."
          },
          "revenue": {
            "maximum": 2147483647,
            "minimum": 0,
            "type": "number",
            "description": "The revenue incurred due to this interaction. Typically only used for purchase events.",
            "example": 5
          },
          "orderId": {
            "type": "string",
            "description": "If there was a transaction involved in the interaction, this property is used for specifying the Id of that transaction. Typically only used for purchase events.",
            "example": "66"
          },
          "quantity": {
            "maximum": 2147483647,
            "minimum": 0,
            "type": "integer",
            "description": "If multiple items of the same Entity were interacted with, this property is used for specifying the number of items. Typically only used for purchase events.",
            "example": 19
          }
        },
        "description": "Used for tracking end user interactions such as clicks, add to cart and purchases."
      },
      "createEventsRequest": {
        "title": "createEventsRequest",
        "required": [
          "events"
        ],
        "type": "object",
        "properties": {
          "events": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/event"
            },
            "description": "Array of events submitted to the engine."
          },
          "customData": {
            "type": "object",
            "additionalProperties": {
              "oneOf": [
                {
                  "type": "string"
                },
                {
                  "type": "number"
                },
                {
                  "type": "integer"
                },
                {
                  "type": "boolean"
                }
              ]
            },
            "description": "Any additional, non-standard, data. Contact support for information about how and when to use this."
          }
        },
        "description": "Used to signal the engine that the user has exhibited a behavior."
      },
      "getEntitiesRequest": {
        "title": "getEntitiesRequest",
        "type": "object",
        "properties": {
          "resultsOptions": {
            "allOf": [
              {
                "$ref": "#/components/schemas/entityCollectionParameters"
              }
            ],
            "description": "Parameters for specifying which results to retrieve and how to format them."
          },
          "customData": {
            "type": "object",
            "additionalProperties": {
              "oneOf": [
                {
                  "type": "string"
                },
                {
                  "type": "number"
                },
                {
                  "type": "integer"
                },
                {
                  "type": "boolean"
                }
              ]
            },
            "description": "Any additional, non-standard, data. Contact support for information about how and when to use this."
          }
        },
        "description": "Used to perform a request to get entities."
      },
      "getComplementaryEntitiesRequest": {
        "title": "getComplementaryEntitiesRequest",
        "required": [
          "entity"
        ],
        "type": "object",
        "properties": {
          "entity": {
            "allOf": [
              {
                "$ref": "#/components/schemas/entity"
              }
            ],
            "description": "The entity to find complementary entities to."
          },
          "resultsOptions": {
            "allOf": [
              {
                "$ref": "#/components/schemas/entityCollectionParameters"
              }
            ],
            "description": "Parameters for specifying which complementary results to retrieve and how to format them."
          },
          "customData": {
            "type": "object",
            "additionalProperties": {
              "oneOf": [
                {
                  "type": "string"
                },
                {
                  "type": "number"
                },
                {
                  "type": "integer"
                },
                {
                  "type": "boolean"
                }
              ]
            },
            "description": "Any additional, non-standard, data. Contact support for information about how and when to use this."
          }
        },
        "description": "Used to perform a request to get entities that are complementary to a selected entity."
      },
      "getBasketRecommendationsRequest": {
        "title": "getBasketRecommendationsRequest",
        "required": [
          "entities"
        ],
        "type": "object",
        "properties": {
          "entities": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/entity"
            },
            "description": "The entities to find recommendations for."
          },
          "resultsOptions": {
            "allOf": [
              {
                "$ref": "#/components/schemas/entityCollectionParameters"
              }
            ],
            "description": "Parameters for specifying which recommendations results to retrieve and how to format them."
          },
          "customData": {
            "type": "object",
            "additionalProperties": {
              "oneOf": [
                {
                  "type": "string"
                },
                {
                  "type": "number"
                },
                {
                  "type": "integer"
                },
                {
                  "type": "boolean"
                }
              ]
            },
            "description": "Any additional, non-standard, data. Contact support for information about how and when to use this."
          }
        },
        "description": "Used to perform a request to get recommendations for a set of product ids."
      },
      "getRecommendedEntitiesRequest": {
        "title": "getRecommendedEntitiesRequest",
        "type": "object",
        "properties": {
          "resultsOptions": {
            "allOf": [
              {
                "$ref": "#/components/schemas/entityCollectionParameters"
              }
            ],
            "description": "Parameters for specifying which recommendations results to retrieve and how to format them."
          },
          "customData": {
            "type": "object",
            "additionalProperties": {
              "oneOf": [
                {
                  "type": "string"
                },
                {
                  "type": "number"
                },
                {
                  "type": "integer"
                },
                {
                  "type": "boolean"
                }
              ]
            },
            "description": "Any additional, non-standard, data. Contact support for information about how and when to use this."
          }
        },
        "description": "Used to perform a request to get personalized recommendations."
      },
      "getRelatedEntitiesRequest": {
        "title": "getRelatedEntitiesRequest",
        "required": [
          "entity"
        ],
        "type": "object",
        "properties": {
          "entity": {
            "allOf": [
              {
                "$ref": "#/components/schemas/entity"
              }
            ],
            "description": "The entity to find related entities to."
          },
          "resultsOptions": {
            "allOf": [
              {
                "$ref": "#/components/schemas/entityCollectionParameters"
              }
            ],
            "description": "Parameters for specifying which related results to retrieve and how to format them."
          },
          "customData": {
            "type": "object",
            "additionalProperties": {
              "oneOf": [
                {
                  "type": "string"
                },
                {
                  "type": "number"
                },
                {
                  "type": "integer"
                },
                {
                  "type": "boolean"
                }
              ]
            },
            "description": "Any additional, non-standard, data. Contact support for information about how and when to use this."
          }
        },
        "description": "Used to perform a request to get entities related to a selected entity."
      },
      "getPopularEntitiesRequest": {
        "title": "getPopularEntitiesRequest",
        "required": [
          "behaviorType"
        ],
        "type": "object",
        "properties": {
          "behaviorType": {
            "type": "string",
            "description": "The interaction or navigation type to include (such as \"click\", \"purchase\" or \"search\")."
          },
          "entityType": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "The entity types to include (such as \"Product\" or \"Query\") or null for all."
          },
          "forUserId": {
            "type": "string",
            "description": "A user ID to retrieve the most common/recent entities for that user or null to retrieve the globally most common/recent entities. The literal \"(CurrentUser)\" can be specified to use the user ID from the User-Id request header."
          },
          "resultsOptions": {
            "allOf": [
              {
                "$ref": "#/components/schemas/entityCollectionParameters"
              }
            ],
            "description": "Parameters for specifying how to filter and sort the results."
          },
          "customData": {
            "type": "object",
            "additionalProperties": {
              "oneOf": [
                {
                  "type": "string"
                },
                {
                  "type": "number"
                },
                {
                  "type": "integer"
                },
                {
                  "type": "boolean"
                }
              ]
            },
            "description": "Any additional, non-standard, data. Contact support for information about how and when to use this."
          }
        },
        "description": "Used to perform a request to get entities that a user (or all users) most commonly interacted with or navigated to."
      },
      "getRecentEntitiesRequest": {
        "title": "getRecentEntitiesRequest",
        "required": [
          "behaviorType"
        ],
        "type": "object",
        "properties": {
          "behaviorType": {
            "type": "string",
            "description": "The interaction or navigation type to include (such as \"click\", \"purchase\" or \"search\")."
          },
          "entityType": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "The entity types to include (such as \"Product\" or \"Query\") or null for all."
          },
          "forUserId": {
            "type": "string",
            "description": "A user ID to retrieve the most common/recent entities for that user or null to retrieve the globally most common/recent entities. The literal \"(CurrentUser)\" can be specified to use the user ID from the User-Id request header."
          },
          "resultsOptions": {
            "allOf": [
              {
                "$ref": "#/components/schemas/entityCollectionParameters"
              }
            ],
            "description": "Parameters for specifying how to filter and sort the results."
          },
          "customData": {
            "type": "object",
            "additionalProperties": {
              "oneOf": [
                {
                  "type": "string"
                },
                {
                  "type": "number"
                },
                {
                  "type": "integer"
                },
                {
                  "type": "boolean"
                }
              ]
            },
            "description": "Any additional, non-standard, data. Contact support for information about how and when to use this."
          }
        },
        "description": "Used to perform a request to get entities that a user (or all users) most recently interacted with or navigated to."
      },
      "gebaAttributeNameValuePair": {
        "title": "gebaAttributeNameValuePair",
        "required": [
          "name",
          "value"
        ],
        "type": "object",
        "properties": {
          "name": {
            "maxLength": 100,
            "type": "string",
            "description": "The name of the attribute.",
            "example": "category"
          },
          "value": {
            "maxLength": 300,
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "The value of the attribute. NOTE: Not all engines currently support multiple values. Please test whether this works with your engine and contact support if you receive an error.",
            "example": "AT walkers"
          }
        },
        "description": "A combination of an attribute name and an attribute value for GetEntitiesByAttribute."
      },
      "requestAliasFields": {
        "title": "requestAliasFields",
        "required": [
          "name",
          "value",
          "details"
        ],
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Specify an alias for this attribute name.",
            "example": "Subcategory"
          },
          "value": {
            "type": "string",
            "description": "Specify an alias for this attribute value.",
            "example": "Armoured Cavalry"
          },
          "details": {
            "type": "string",
            "description": "Specify a more detailed description for this attribute name-value pair. Will be shown in the Portal.",
            "example": "Warfare > Vehicles > Armoured Cavalry"
          }
        },
        "description": "Human-readable labels to be displayed in the Portal."
      },
      "getEntitiesByAttributeRequest": {
        "title": "getEntitiesByAttributeRequest",
        "required": [
          "attribute"
        ],
        "type": "object",
        "properties": {
          "attribute": {
            "allOf": [
              {
                "$ref": "#/components/schemas/gebaAttributeNameValuePair"
              }
            ],
            "description": "The attribute name-value-pair to find entities connected to. Note: this attribute needs to be indexed in the engine. See the endpoint GetIndexedAttributes."
          },
          "resultsOptions": {
            "allOf": [
              {
                "$ref": "#/components/schemas/entityCollectionParameters"
              }
            ],
            "description": "Parameters for specifying which results to retrieve and how to format them."
          },
          "requestAlias": {
            "allOf": [
              {
                "$ref": "#/components/schemas/requestAliasFields"
              }
            ],
            "description": "Provides human-readable labels in the Portal."
          },
          "customData": {
            "type": "object",
            "additionalProperties": {
              "oneOf": [
                {
                  "type": "string"
                },
                {
                  "type": "number"
                },
                {
                  "type": "integer"
                },
                {
                  "type": "boolean"
                }
              ]
            },
            "description": "Any additional, non-standard, data. Contact support for information about how and when to use this."
          }
        },
        "description": "Used to perform a request to get entities with an indexed string attribute. For attributes that are not indexed, use GetEntities with a filter instead. To find out what attributes are indexed in the engine call /getIndexedAttributes. To find out what values are available call /getIndexedAttributeValues. "
      },
      "getIndexedAttributesRequest": {
        "title": "getIndexedAttributesRequest",
        "type": "object",
        "properties": {
          "customData": {
            "type": "object",
            "additionalProperties": {
              "oneOf": [
                {
                  "type": "string"
                },
                {
                  "type": "number"
                },
                {
                  "type": "integer"
                },
                {
                  "type": "boolean"
                }
              ]
            },
            "description": "Any additional, non-standard, data. Contact support for information about how and when to use this."
          }
        },
        "description": "Used to perform a request to get information about attributes, indexed and non-indexed."
      },
      "getIndexedAttributeValuesRequest": {
        "title": "getIndexedAttributeValuesRequest",
        "required": [
          "attributeName"
        ],
        "type": "object",
        "properties": {
          "attributeName": {
            "type": "string",
            "description": "The name of the attribute for which to fetch indexed values.",
            "example": "category"
          },
          "customData": {
            "type": "object",
            "additionalProperties": {
              "oneOf": [
                {
                  "type": "string"
                },
                {
                  "type": "number"
                },
                {
                  "type": "integer"
                },
                {
                  "type": "boolean"
                }
              ]
            },
            "description": "Any additional, non-standard, data. Contact support for information about how and when to use this."
          }
        },
        "description": "Used to perform a request to get a list of all unique values that are indexed for the provided attribute. To find out what attributes are indexed in the engine call /getIndexedAttributes."
      },
      "syncRequest": {
        "title": "syncRequest",
        "type": "object",
        "properties": {
          "customData": {
            "type": "object",
            "additionalProperties": {
              "oneOf": [
                {
                  "type": "string"
                },
                {
                  "type": "number"
                },
                {
                  "type": "integer"
                },
                {
                  "type": "boolean"
                }
              ]
            },
            "description": "Any additional, non-standard, data. Contact support for information about how and when to use this."
          }
        },
        "description": "Used for telling the engine to re-sync the catalog."
      },
      "customRequest": {
        "title": "customRequest",
        "type": "object",
        "properties": {
          "customData": {
            "type": "object",
            "additionalProperties": {
              "oneOf": [
                {
                  "type": "string"
                },
                {
                  "type": "number"
                },
                {
                  "type": "integer"
                },
                {
                  "type": "boolean"
                }
              ]
            },
            "description": "Any additional, non-standard, data. Contact support for information about how and when to use this."
          }
        },
        "description": "Used to trigger predefined client-specific actions."
      },
      "queryResult": {
        "title": "queryResult",
        "required": [
          "query"
        ],
        "type": "object",
        "properties": {
          "query": {
            "type": "string",
            "description": "The query.",
            "example": "forest fighting equipment"
          }
        },
        "description": "An instance of a query. Wraps a string, with optional scopes."
      },
      "unScopedQueryResult": {
        "title": "unScopedQueryResult",
        "allOf": [
          {
            "$ref": "#/components/schemas/queryResult"
          },
          {
            "title": "unScopedQueryResult",
            "required": [
              "query"
            ],
            "type": "object",
            "description": "A query without scopes."
          }
        ],
        "description": "A query without scopes."
      },
      "scopedQueryResult": {
        "title": "scopedQueryResult",
        "allOf": [
          {
            "$ref": "#/components/schemas/queryResult"
          },
          {
            "title": "scopedQueryResult",
            "required": [
              "query"
            ],
            "type": "object",
            "properties": {
              "scopes": {
                "type": "array",
                "items": {
                  "oneOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "number"
                    },
                    {
                      "type": "integer"
                    },
                    {
                      "type": "boolean"
                    }
                  ]
                },
                "description": "Scopes where this query is relevant. Based on which entity attribute values will be present in the search results. This can be used to direct the user to pre-faceted search results.",
                "example": [
                  "AT walkers",
                  "R2 droids"
                ]
              },
              "scopeAttributeName": {
                "type": "string",
                "description": "Which attribute the scopes were built using.",
                "example": "category"
              }
            },
            "description": "A query with scopes."
          }
        ],
        "description": "A query with scopes."
      },
      "queryCollection": {
        "title": "queryCollection",
        "type": "object",
        "properties": {
          "count": {
            "maximum": 2147483647,
            "minimum": 0,
            "type": "integer",
            "description": "The number of queries in this collection.",
            "example": 100
          },
          "items": {
            "type": "array",
            "items": {
              "oneOf": [
                {
                  "$ref": "#/components/schemas/unScopedQueryResult"
                },
                {
                  "$ref": "#/components/schemas/scopedQueryResult"
                }
              ]
            },
            "description": "The queries."
          }
        },
        "description": "A collection of queries (strings)."
      },
      "facet": {
        "title": "facet",
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "The name of the facet (as set in the request). If name is not specified in the request parameter this will be the requested attributeName.",
            "example": "categoryFacet"
          },
          "type": {
            "enum": [
              "distinct",
              "range"
            ],
            "type": "string",
            "description": "The type of the facet (as set in the request).",
            "example": "distinct"
          },
          "approximated": {
            "type": "boolean",
            "description": "Whether the Items or Values are approximate, rather than exact.",
            "default": false,
            "example": true
          }
        },
        "description": "An object containing facet information about all attributes values existing in the attribute (as set in the request)."
      },
      "distinctFacetItem": {
        "title": "distinctFacetItem",
        "type": "object",
        "properties": {
          "item": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              },
              {
                "type": "integer"
              },
              {
                "type": "boolean"
              }
            ],
            "description": "The attribute value found in the results.",
            "example": "AT walkers"
          },
          "count": {
            "type": "integer",
            "description": "The number of entities in the results that have this attribute value.",
            "example": 15
          },
          "selected": {
            "type": "boolean",
            "description": "Whether this attribute value was marked as selected in the request."
          }
        },
        "description": "An object containing facet information about a single attribute value."
      },
      "distinctFacet": {
        "title": "distinctFacet",
        "allOf": [
          {
            "$ref": "#/components/schemas/facet"
          },
          {
            "title": "distinctFacet",
            "type": "object",
            "properties": {
              "items": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/distinctFacetItem"
                },
                "description": "The facets."
              }
            },
            "description": "A list of unique facet values and the number of hits containing each value."
          }
        ],
        "description": "A list of unique facet values and the number of hits containing each value."
      },
      "rangeFacet": {
        "title": "rangeFacet",
        "allOf": [
          {
            "$ref": "#/components/schemas/facet"
          },
          {
            "title": "rangeFacet",
            "type": "object",
            "properties": {
              "min": {
                "oneOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "integer"
                  },
                  {
                    "type": "boolean"
                  },
                  {
                    "type": "string",
                    "format": "date-time"
                  }
                ],
                "description": "The minimum value found.",
                "example": 15
              },
              "max": {
                "oneOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "integer"
                  },
                  {
                    "type": "boolean"
                  },
                  {
                    "type": "string",
                    "format": "date-time"
                  }
                ],
                "description": "The maximum value found.",
                "example": 209
              },
              "selectedMin": {
                "oneOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "integer"
                  },
                  {
                    "type": "boolean"
                  },
                  {
                    "type": "string",
                    "format": "date-time"
                  }
                ],
                "description": "The value that was selected as minimum in the request.",
                "example": 5
              },
              "selectedMax": {
                "oneOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "integer"
                  },
                  {
                    "type": "boolean"
                  },
                  {
                    "type": "string",
                    "format": "date-time"
                  }
                ],
                "description": "The value that was selected as maximum in the request.",
                "example": 1000
              }
            },
            "description": "The max and min of all the values for this attribute in the collection of results."
          }
        ],
        "description": "The max and min of all the values for this attribute in the collection of results."
      },
      "entityCollection": {
        "title": "entityCollection",
        "type": "object",
        "properties": {
          "count": {
            "maximum": 2147483647,
            "minimum": 0,
            "type": "integer",
            "description": "The number of entities in this collection.",
            "example": 100
          },
          "facets": {
            "type": "array",
            "items": {
              "oneOf": [
                {
                  "$ref": "#/components/schemas/distinctFacet"
                },
                {
                  "$ref": "#/components/schemas/rangeFacet"
                }
              ]
            },
            "description": "The facets found for this collection."
          },
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/entity"
            },
            "description": "The entities."
          }
        },
        "description": "A collection of entities."
      },
      "searchResponse": {
        "title": "searchResponse",
        "allOf": [
          {
            "$ref": "#/components/schemas/response"
          },
          {
            "title": "searchResponse",
            "required": [
              "makesSense"
            ],
            "type": "object",
            "properties": {
              "makesSense": {
                "type": "boolean",
                "description": "Whether or not the engine understood the search query.",
                "example": true
              },
              "spellingSuggestions": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/queryCollection"
                  }
                ],
                "description": "A collection of suggestions for alternate spellings of the query."
              },
              "relatedQueries": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/queryCollection"
                  }
                ],
                "description": "A collection of suggestions for queries that are related to the provided query."
              },
              "results": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/entityCollection"
                  }
                ],
                "description": "The results that match the query."
              },
              "relatedResults": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/entityCollection"
                  }
                ],
                "description": "Any additional results that, while not matching, are relevant to the query."
              },
              "redirect": {
                "type": "string",
                "description": "The redirect target."
              },
              "customData": {
                "type": "object",
                "additionalProperties": {
                  "oneOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "number"
                    },
                    {
                      "type": "integer"
                    },
                    {
                      "type": "boolean"
                    }
                  ]
                },
                "description": "Any additional, non-standard, data. Contact support for information about how and when to use this."
              }
            },
            "description": "The result of a search operation."
          }
        ],
        "description": "The result of a search operation."
      },
      "autoCompleteResponse": {
        "title": "autoCompleteResponse",
        "allOf": [
          {
            "$ref": "#/components/schemas/response"
          },
          {
            "title": "autoCompleteResponse",
            "type": "object",
            "properties": {
              "scopedQuery": {
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/unScopedQueryResult"
                  },
                  {
                    "$ref": "#/components/schemas/scopedQueryResult"
                  }
                ],
                "description": "The query the engine deemed most relevant, will get a result with scopes."
              },
              "queries": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/queryCollection"
                  }
                ],
                "description": "A collection of query suggestions for the request query."
              },
              "customData": {
                "type": "object",
                "additionalProperties": {
                  "oneOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "number"
                    },
                    {
                      "type": "integer"
                    },
                    {
                      "type": "boolean"
                    }
                  ]
                },
                "description": "Any additional, non-standard, data. Contact support for information about how and when to use this."
              }
            },
            "description": "The result of an autocomplete operation."
          }
        ],
        "description": "The result of an autocomplete operation."
      },
      "response": {
        "title": "response",
        "type": "object",
        "properties": {
          "customData": {
            "type": "object",
            "additionalProperties": {
              "oneOf": [
                {
                  "type": "string"
                },
                {
                  "type": "number"
                },
                {
                  "type": "integer"
                },
                {
                  "type": "boolean"
                }
              ]
            },
            "description": "Any additional, non-standard, data. Contact support for information about how and when to use this."
          }
        },
        "description": "A response from the engine. Used for responses that don't return any standardized data parameters."
      },
      "errorDetails": {
        "title": "errorDetails",
        "type": "object",
        "properties": {
          "code": {
            "type": "integer",
            "description": "The HTTP status code of the response.",
            "example": 400
          },
          "status": {
            "type": "string",
            "description": "The HTTP status string of the response.",
            "example": "Bad request"
          },
          "title": {
            "type": "string",
            "description": "The name of the error.",
            "example": "The request was not valid."
          },
          "detail": {
            "type": "string",
            "description": "The more detailed information about the error. Note: not always shown.",
            "example": "Field skip is not within the allowed range."
          },
          "parameter": {
            "type": "string",
            "description": "The input parameter, if any, that caused the error.",
            "example": "request.results.skip"
          }
        },
        "description": "Information about the error."
      },
      "errorResponse": {
        "title": "errorResponse",
        "allOf": [
          {
            "$ref": "#/components/schemas/response"
          },
          {
            "title": "errorResponse",
            "type": "object",
            "properties": {
              "error": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/errorDetails"
                  }
                ],
                "description": "Details about the error."
              },
              "customData": {
                "type": "object",
                "additionalProperties": {
                  "oneOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "number"
                    },
                    {
                      "type": "integer"
                    },
                    {
                      "type": "boolean"
                    }
                  ]
                },
                "description": "Any additional, non-standard, data. Contact support for information about how and when to use this."
              }
            },
            "description": "Returned when something went wrong."
          }
        ],
        "description": "Returned when something went wrong."
      },
      "getBasketRecommendationsResponse": {
        "title": "getBasketRecommendationsResponse",
        "allOf": [
          {
            "$ref": "#/components/schemas/response"
          },
          {
            "title": "getBasketRecommendationsResponse",
            "type": "object",
            "properties": {
              "results": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/entityCollection"
                  }
                ],
                "description": "Recommended entities for the given set of entities."
              },
              "customData": {
                "type": "object",
                "additionalProperties": {
                  "oneOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "number"
                    },
                    {
                      "type": "integer"
                    },
                    {
                      "type": "boolean"
                    }
                  ]
                },
                "description": "Any additional, non-standard, data. Contact support for information about how and when to use this."
              }
            },
            "description": "The result of a request to get basket recommendations."
          }
        ],
        "description": "The result of a request to get basket recommendations."
      },
      "getComplementaryEntitiesResponse": {
        "title": "getComplementaryEntitiesResponse",
        "allOf": [
          {
            "$ref": "#/components/schemas/response"
          },
          {
            "title": "getComplementaryEntitiesResponse",
            "type": "object",
            "properties": {
              "results": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/entityCollection"
                  }
                ],
                "description": "The entities that are complementary to the supplied entity."
              },
              "customData": {
                "type": "object",
                "additionalProperties": {
                  "oneOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "number"
                    },
                    {
                      "type": "integer"
                    },
                    {
                      "type": "boolean"
                    }
                  ]
                },
                "description": "Any additional, non-standard, data. Contact support for information about how and when to use this."
              }
            },
            "description": "The result of a request to get complementary entities."
          }
        ],
        "description": "The result of a request to get complementary entities."
      },
      "getEntitiesByAttributeResponse": {
        "title": "getEntitiesByAttributeResponse",
        "allOf": [
          {
            "$ref": "#/components/schemas/response"
          },
          {
            "title": "getEntitiesByAttributeResponse",
            "type": "object",
            "properties": {
              "results": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/entityCollection"
                  }
                ],
                "description": "The entities that are connected to the category."
              },
              "customData": {
                "type": "object",
                "additionalProperties": {
                  "oneOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "number"
                    },
                    {
                      "type": "integer"
                    },
                    {
                      "type": "boolean"
                    }
                  ]
                },
                "description": "Any additional, non-standard, data. Contact support for information about how and when to use this."
              }
            },
            "description": "The result of a request to get entities in a category."
          }
        ],
        "description": "The result of a request to get entities in a category."
      },
      "getEntitiesResponse": {
        "title": "getEntitiesResponse",
        "allOf": [
          {
            "$ref": "#/components/schemas/response"
          },
          {
            "title": "getEntitiesResponse",
            "type": "object",
            "properties": {
              "results": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/entityCollection"
                  }
                ],
                "description": "The entities."
              },
              "customData": {
                "type": "object",
                "additionalProperties": {
                  "oneOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "number"
                    },
                    {
                      "type": "integer"
                    },
                    {
                      "type": "boolean"
                    }
                  ]
                },
                "description": "Any additional, non-standard, data. Contact support for information about how and when to use this."
              }
            },
            "description": "The result of a request to get entities."
          }
        ],
        "description": "The result of a request to get entities."
      },
      "getIndexedAttributesResponse": {
        "title": "getIndexedAttributesResponse",
        "allOf": [
          {
            "$ref": "#/components/schemas/response"
          },
          {
            "title": "getIndexedAttributesResponse",
            "type": "object",
            "properties": {
              "attributes": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "These are the entity attributes that the engine currently has in memory. When making a request that is filterable, sortable or facet-able, these attributes are available.",
                "example": [
                  "category",
                  "brand",
                  "manufacturer",
                  "price",
                  "modified",
                  "numberinstock"
                ]
              },
              "indexedAttributes": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "These attributes are indexed by the engine and can be used in the GetEntitiesByAttribute request.",
                "example": [
                  "category",
                  "brand",
                  "manufacturer"
                ]
              },
              "customData": {
                "type": "object",
                "additionalProperties": {
                  "oneOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "number"
                    },
                    {
                      "type": "integer"
                    },
                    {
                      "type": "boolean"
                    }
                  ]
                },
                "description": "Any additional, non-standard, data. Contact support for information about how and when to use this."
              }
            },
            "description": "Result from the GetIndexedAttribute request."
          }
        ],
        "description": "Result from the GetIndexedAttribute request."
      },
      "getIndexedAttributeValuesResponse": {
        "title": "getIndexedAttributeValuesResponse",
        "allOf": [
          {
            "$ref": "#/components/schemas/response"
          },
          {
            "title": "getIndexedAttributeValuesResponse",
            "type": "object",
            "properties": {
              "values": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "All the values that were indexed for the provided attribute.",
                "example": [
                  "AT walkers",
                  "Protocol droids"
                ]
              },
              "customData": {
                "type": "object",
                "additionalProperties": {
                  "oneOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "number"
                    },
                    {
                      "type": "integer"
                    },
                    {
                      "type": "boolean"
                    }
                  ]
                },
                "description": "Any additional, non-standard, data. Contact support for information about how and when to use this."
              }
            },
            "description": "Result from the GetIndexedAttributeValues request."
          }
        ],
        "description": "Result from the GetIndexedAttributeValues request."
      },
      "getRecommendedEntitiesResponse": {
        "title": "getRecommendedEntitiesResponse",
        "allOf": [
          {
            "$ref": "#/components/schemas/response"
          },
          {
            "title": "getRecommendedEntitiesResponse",
            "type": "object",
            "properties": {
              "results": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/entityCollection"
                  }
                ],
                "description": "The personalized recommended entities."
              },
              "customData": {
                "type": "object",
                "additionalProperties": {
                  "oneOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "number"
                    },
                    {
                      "type": "integer"
                    },
                    {
                      "type": "boolean"
                    }
                  ]
                },
                "description": "Any additional, non-standard, data. Contact support for information about how and when to use this."
              }
            },
            "description": "The result of a request to get personalized recommendations."
          }
        ],
        "description": "The result of a request to get personalized recommendations."
      },
      "getRelatedEntitiesResponse": {
        "title": "getRelatedEntitiesResponse",
        "allOf": [
          {
            "$ref": "#/components/schemas/response"
          },
          {
            "title": "getRelatedEntitiesResponse",
            "type": "object",
            "properties": {
              "results": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/entityCollection"
                  }
                ],
                "description": "The entities that are related to the supplied entity."
              },
              "customData": {
                "type": "object",
                "additionalProperties": {
                  "oneOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "number"
                    },
                    {
                      "type": "integer"
                    },
                    {
                      "type": "boolean"
                    }
                  ]
                },
                "description": "Any additional, non-standard, data. Contact support for information about how and when to use this."
              }
            },
            "description": "The result of a request to get related entities."
          }
        ],
        "description": "The result of a request to get related entities."
      }
    },
    "headers": {
      "User-Id": {
        "description": "A unique identifier of the end user that initiated the action.",
        "schema": {
          "maxLength": 100,
          "type": "string"
        },
        "example": "Luke.Skywalker"
      },
      "Api-Version": {
        "description": "What version of the API to use.",
        "required": true,
        "schema": {
          "type": "string"
        },
        "example": "V3"
      },
      "Lib-Version": {
        "description": "What library is used to generate this request.",
        "schema": {
          "type": "string"
        },
        "example": "js:2018-01-01"
      },
      "User-Ip": {
        "description": "The IP address of the end user.",
        "schema": {
          "type": "string"
        },
        "example": "127.0.0.1"
      },
      "User-Useragent": {
        "description": "The User-Agent header sent by the end user.",
        "schema": {
          "type": "string"
        },
        "example": "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0"
      },
      "User-Referer": {
        "description": "The referer header sent by the end user.",
        "schema": {
          "type": "string"
        },
        "example": "https://www.loop54.com/docs"
      },
      "Loop54-key": {
        "description": "Your API key.",
        "schema": {
          "type": "string"
        },
        "example": "9cdfb439c7876e703e307864c9167a15"
      }
    }
  },
  "tags": [
    {
      "name": "User initiated",
      "description": "Operations for getting products, or other entities, and to collect user behavior."
    },
    {
      "name": "Administrative",
      "description": "Operations for updating the indexed products"
    },
    {
      "name": "Other"
    }
  ]
}

