/** * This file was auto-generated by openapi-typescript. * Do not make direct changes to the file. */ export interface paths { "/product/{product-id}": { /** Creates a new product or updates an existing one */ put: operations["SetProduct"]; /** Deletes product and its images from a site on a given product id */ delete: operations["DeleteProduct"]; parameters: { path: { "product-id": components["parameters"]["product-id"]; }; }; }; "/similar-products": { /** * This endpoint allows to discover products similar to the source product, usually chosen by a user. * The response contains a list of similarities for each product. */ post: operations["GetSimilarProducts"]; }; "/cross-selling": { /** * This endpoint suggests related products based on a source product, usually chosen by a user. * The response contains a list of suggestions for each product. */ post: operations["GetCrossSellingProducts"]; }; "/text-search": { /** * This endpoint allows you to search with text query in textual attributes and visual features. * The response contains the search result for each product. */ post: operations["TextSearchProducts"]; }; "/auto-suggest": { /** This endpoint provides auto-suggested search queries based on a partial text input. */ post: operations["AutoSuggest"]; }; "/visual-search": { /** * This endpoint allows you to search with an image in visual features and textual attributes. * The response contains the search result for each product. */ post: operations["VisualSearchProducts"]; }; "/search/session": { /** Starts a reusable search session for a one image. */ post: operations["CreateSearchSession"]; }; "/search/session/{search-id}": { /** Starts a search in existing session. */ get: operations["SearchInExistingSession"]; }; "/search/session/{search-id}/detect-objects": { /** Get detected objects of image in existing session. */ get: operations["DetectObjectsOfImageInExistingSession"]; }; "/search/session/{search-id}/upload-image": { /** Upload high resolution image to existing session. */ put: operations["UploadHighResolutionImageToExistingSession"]; }; "/product-listing-page": { /** * This endpoint returns a list of filtered products. * The response contains the products. */ post: operations["ProductListingPage"]; }; "/product/{product-id}/predicted-attributes": { /** * This endpoint predicts the fields of a single product, already existing in your product catalog. * In addition to the fields of the products, the response also contains information about the product's images. */ post: operations["predictProductAttributes"]; }; "/product/{product-id}/similar-products": { /** * This endpoint allows to discover products similar to the source product, usually chosen by a user. * The response contains a list of similarities for each product. */ get: operations["GetSimilarProductsToInputImage"]; }; "/product/{product-id}/cross-selling-products": { /** * This endpoint suggests related products based on a source product, usually chosen by a user. * The response contains a list of suggestions for each product. */ get: operations["GetCrossSellingProductsToInputImage"]; }; } export interface components { schemas: { /** @example 6edf9d4d-60e8-49f3-b120-e89d728b8a89 */ "request-id": string; /** @example 120857 */ "product-id": string; "campaign-id": number | string; /** @description list of campaign ids */ campaigns: components["schemas"]["campaign-id"][]; /** * @description returns less than or equal to the campaign's defined results * @example 8 */ resultsCount: number; /** @example 2 */ "image-code": string; /** * @deprecated * @example 12ff21 */ color: string; /** @description each item describes a column and values from that column that should be excluded from the result set */ excluded: components["schemas"]["value-list"][]; /** @description each item describes a column and values from that column that should be included in the result set */ included: components["schemas"]["value-list"][]; /** * @description each item describes a category path that should be used instead of the product's actual category paths * @example cm9vdA,TcO2YmVsPlRpc2NoZQ */ category: components["schemas"]["category-path"][]; "energy-class-range": { min?: components["schemas"]["energy-efficiency-class"]; max?: components["schemas"]["energy-efficiency-class"]; }; "energy-certification-class-icon-urls": { /** Format: uri */ left: string; /** Format: uri */ right: string; }; "energy-certification": { certificationClass?: components["schemas"]["energy-efficiency-class"]; classIconUrls?: components["schemas"]["energy-certification-class-icon-urls"]; classRange?: components["schemas"]["energy-class-range"]; /** Format: uri */ classLabelUrl?: string; /** Format: uri */ classDataSheetUrl?: string; productType?: string; }; /** @example A+ */ "energy-efficiency-class": ("A+++" | "A++" | "A+" | "A" | "B" | "C" | "D" | "E" | "F" | "G") | null; "ion-detected-object-rectangle": { left?: number; /** @example 0.3641 */ top?: number; /** @example 0.94 */ width?: number; /** @example 0.54175 */ height?: number; }; "ion-detected-object-value": { classId?: number; class?: string; score: number; rectangle: components["schemas"]["ion-detected-object-rectangle"]; }; "ion-detected-object": { value?: components["schemas"]["ion-detected-object-value"]; links?: { [key: string]: components["schemas"]["ion-link"]; }; }; "ion-detected-objects": { value?: components["schemas"]["ion-detected-object"][]; }; "delete-image-error": { /** @example 25 */ "site-id"?: number; /** @example 1 */ "image-id"?: string; }; "product-data": { /** @example product title */ title?: string | null; /** @example product description */ description?: string | null; /** @example https://www.example.com/writing/google-pens */ link?: string | null; /** @example https://www.m.example.com/writing/fiji-pens */ mobile_link?: string | null; /** @example in_stock */ availability?: ("in_stock" | "out_of_stock" | "preorder" | "backorder") | null; /** @example 18.5 */ price?: number | null; /** @example 25.5 */ sale_price?: number | null; /** * @description Only category paths are supported. * @example Apparel & Accessories > Clothing > Dresses */ google_product_category?: string | null; /** @example Home > Women > Dresses > Maxi Dresses, Home > Women > Dresses > Party Dresses */ product_type?: string | null; /** @example Google */ brand?: string | null; /** @example 3234567890126, 123456788787, 98746543218 */ gtin?: string | null; /** @example GO12345OOGLE */ mpn?: string | null; /** @example new */ condition?: ("new" | "refurbished" | "used") | null; /** @example true */ adult?: boolean | null; /** @example 6 */ multipack?: number | null; is_bundle?: boolean | null; energy_efficiency_class?: components["schemas"]["energy-efficiency-class"]; min_energy_efficiency_class?: components["schemas"]["energy-efficiency-class"]; max_energy_efficiency_class?: components["schemas"]["energy-efficiency-class"]; /** @example infant */ age_group?: ("newborn" | "infant" | "toddler" | "kids" | "adult") | null; /** @example Orange Mango Explosion */ color?: string | null; /** @example female */ gender?: ("male" | "female" | "unisex") | null; /** @example Leather */ material?: string | null; /** @example Striped */ pattern?: string | null; /** @example XL */ size?: string | null; /** @example petite */ size_type?: ("regular" | "petite" | "tall" | "plus" | "big" | "maternity") | null; /** @example UK */ size_system?: ("AU" | "BR" | "CN" | "DE" | "EU" | "FR" | "IT" | "JP" | "MEX" | "UK" | "US") | null; /** @example AB12345 */ item_group_id?: string | null; /** @example summer */ custom_label_0?: string | null; /** @example summer */ custom_label_1?: string | null; /** @example summer */ custom_label_2?: string | null; /** @example summer */ custom_label_3?: string | null; /** @example summer */ custom_label_4?: string | null; /** @example tbby123_us */ promotion_id?: string | null; /** @example General:Product Type:Digital player,General:Digital Player Type:Flash based,Display:Resolution:432 x 240,Display:Diagonal Size:"2.5" */ product_detail?: string | null; /** @example "Supports thousands of apps, including Netflix, YouTube, HBO Now, Spotify, Showtime, Pandora, Google Play Movies", "1080p maximum display resolution" */ product_highlight?: string | null; /** @example 30 cm */ product_length?: string | null; /** @example 30 cm */ product_width?: string | null; /** @example 30 cm */ product_height?: string | null; /** @example 10 kg */ product_weight?: string | null; }; product: { /** @example 11 */ "site-id"?: number; /** @example 100257 */ "product-id"?: string; data?: components["schemas"]["product-data"]; }; "product-annotation": { /** @example success */ message: string; data: components["schemas"]["product"]; }[]; /** Product images object */ "product-annotation-images": { url?: string; }; "product-annotation-error": { /** @example Could not save or publish the product */ message: string; data: components["schemas"]["product"]; /** @example exception message */ debug?: string; }[]; "response-product-item": { kind?: components["schemas"]["item-kind"]; entityType?: components["schemas"]["entity-type"]; /** @example 55fc5f71d6362321cb93b82b387e2f32 */ groupId?: string | null; /** @example 55fc5f71d6362321cb93b82b387e2f32 */ productId?: string; /** @example Livingwalls Fototapete Walls by Patel iconic 3 */ title?: string; /** * @description link to the product detail page * @example http://mainUrl/site/5/product/55fc5f71d6362321cb93b82b387e2f32/details */ deeplink?: string | null; /** @example Fender */ brand?: string | null; /** @example guitar */ productType?: string | null; image?: components["schemas"]["image"]; images?: components["schemas"]["image"][]; price?: { actual?: components["schemas"]["price"] | null; /** @example 24.95 */ sale?: components["schemas"]["price"] | null; }; basePrice?: { actual?: components["schemas"]["basePrice"]; sale?: components["schemas"]["basePrice"]; }; /** @deprecated */ energyEfficiencyClass?: components["schemas"]["energy-efficiency-class"]; /** @deprecated */ minEnergyEfficiencyClass?: components["schemas"]["energy-efficiency-class"]; /** @deprecated */ maxEnergyEfficiencyClass?: components["schemas"]["energy-efficiency-class"]; energyCertifications?: components["schemas"]["energy-certification"][]; custom_label_0?: string | null; custom_label_1?: string | null; custom_label_2?: string | null; custom_label_3?: string | null; custom_label_4?: string | null; }; /** * @deprecated * @description This field is superseded by the entity type and therefore deprecated. */ "item-kind": "product" | "content"; /** * @description The API usually returns products; it can also return entities representing something else. * To enable different handling of these entities, the API uses an `entity-type` to distinguish between them, namely: * * A `product` entity represents a product in the catalog. * * A `content` entity contains information relevant to a user, e.g., trends, opening hours. * * A `list` entity comprises a collection of distinguishable items, e.g., a category page. */ "entity-type": "product" | "content" | "list"; image: { /** * Format: uri * @example http://mainUrl/image.jpg */ original: string; /** * Format: uri * @example http://mainUrl/thumbnail-image.jpg */ thumbnail: string | null; }; /** @example 19.9 */ price: number | null; /** * @description The base price per `measure` is derived by adjusting the product's total cost to a standardized unit of measurement, making it easier to compare products of varying volumes. * @example [object Object] */ basePrice: { price?: components["schemas"]["price"]; /** @example 100 */ quantity?: number; measure?: string; }; /** * @description In a category tree, a category path identifies a category of the tree. * The API expects and returns each category path only in encoded form. * * A category path is a sequence category labels, separated by the `>` character. * Whitespace around the category labels is ignored. * If the `>` character is part of a category label, it must be escaped with `%3E`. * The root node has no label and is omitted in a category path. * To represent the root node, use `root` as the sole label instead. * * Consider the following category tree: * ``` * . * ├── Furniture * │ ├── Benches * │ └── Cabinets & Storage * └── Home & Garden * ├── Plants * ├── Wood Stoves * └── Fish Pond (<><) * ``` * * That contains the following category paths: * - `root` * - `Furniture` * - `Furniture > Benches` * - `Furniture > Cabinets & Storage` * - `Home & Garden` * - `Home & Garden > Plants` * - `Home & Garden > Wood Stoves` * - `Home & Garden > Fish Pond (<%3E<)` * * Category paths are transmitted in encoded form. * To this end, we use the [Base64-URL](https://datatracker.ietf.org/doc/html/rfc4648#section-5) encoding without any padding. * The category paths above are encoded as follows: * - `cm9vdA` * - `RnVybml0dXJl` * - `RnVybml0dXJlID4gQmVuY2hlcw` * - `RnVybml0dXJlID4gQ2FiaW5ldHMgJiBTdG9yYWdl` * - `SG9tZSAmIEdhcmRlbg` * - `SG9tZSAmIEdhcmRlbiA-IFBsYW50cw` * - `SG9tZSAmIEdhcmRlbiA-IFdvb2QgU3RvdmVz` * - `SG9tZSAmIEdhcmRlbiA-IEZpc2ggUG9uZCAoPCUzRTwp` * * On Linux, the `basenc` command can be used to encode category paths: * ```bash * echo -n 'Furniture > Cabinets & Storage' | basenc -w0 --base64url * # returns: RnVybml0dXJlID4gQ2FiaW5ldHMgJiBTdG9yYWdl * echo -n 'RnVybml0dXJlID4gQ2FiaW5ldHMgJiBTdG9yYWdl' | basenc -d -w0 --base64url * # returns: Furniture > Cabinets & Storage * ``` * * @example RnVybml0dXJl,SG9tZSAmIEdhcmRlbg */ "category-path": string; /** * @description A rectangle is defined by the position of its top-left corner and its side lengths. * Each value is relative to an image's dimensions, i.e., they are in the range `[0, 1]`. * The top-left corner is defined to be at `(0, 0)`, the bottom-right corner at `(1, 1)`. */ rectangle: { /** * @description the relative distance to the left edge of the image * @example 0.1728 */ left?: number; /** * @description the relative distance to the top edge of the image * @example 0.3641 */ top?: number; /** * @description the width relative to the image's width * @example 0.4575 */ width?: number; /** * @description the height relative to the image's height * @example 0.2917 */ height?: number; }; "category-filter": components["schemas"]["ion-link"] & { /** @example Kinder */ name: string; }; "name-value-item": { name: string; value: string; }; "ion-link": { /** @example POST */ method: string; /** Format: uri */ href: string; }; "search-area": components["schemas"]["ion-link"] & { rel: string[]; value: components["schemas"]["name-value-item"][]; }; "upload-high-resolution-image": components["schemas"]["ion-link"] & { rel: string[]; value: components["schemas"]["name-value-item"][]; }; "response-products": components["schemas"]["response-product-item"][]; "visual-product-search": components["schemas"]["response-product-item"][]; "ion-visual-product-search": { value?: components["schemas"]["response-product-item"][]; /** @example array */ type?: string; searchArea?: components["schemas"]["search-area"]; uploadHighResolutionImage?: components["schemas"]["upload-high-resolution-image"]; filters?: { /** @example object */ type?: string; value?: { categories?: components["schemas"]["category-filter"][]; }; }; /** @example [object Object] */ links?: { [key: string]: components["schemas"]["ion-link"]; }; detectedObjects?: components["schemas"]["ion-detected-object"][]; }; "similar-products-request": { requestId?: components["schemas"]["request-id"]; productId: components["schemas"]["product-id"]; resultsCount?: components["schemas"]["resultsCount"]; campaigns?: components["schemas"]["campaigns"]; substitutions?: components["schemas"]["request-substitutions"]; staticFilters?: components["schemas"]["request-static-filters"]; dynamicFilters?: components["schemas"]["request-dynamic-filters"]; }; "similar-products-response": { requestId?: components["schemas"]["request-id"]; data: { sourceProduct: components["schemas"]["response-product-item"]; products: components["schemas"]["response-products"]; }; interactions?: components["schemas"]["interactions"]; substitutions?: components["schemas"]["response-substitutions"]; }; "cross-selling-request": { requestId?: components["schemas"]["request-id"]; productId: components["schemas"]["product-id"]; resultsCount?: components["schemas"]["resultsCount"]; campaigns?: components["schemas"]["campaigns"]; staticFilters?: components["schemas"]["request-static-filters"]; dynamicFilters?: components["schemas"]["request-dynamic-filters"]; }; "cross-selling-response": { requestId?: components["schemas"]["request-id"]; data: { sourceProduct: components["schemas"]["response-product-item"]; products: components["schemas"]["response-products"]; }; interactions?: components["schemas"]["interactions"]; }; "text-search-request": { requestId?: components["schemas"]["request-id"]; /** @example flowers */ query: string; resultsCount?: components["schemas"]["resultsCount"]; campaign?: components["schemas"]["campaign-id"]; staticFilters?: components["schemas"]["request-static-filters"]; dynamicFilters?: components["schemas"]["request-dynamic-filters"]; }; "visual-search-request": { requestId?: components["schemas"]["request-id"]; query: { /** * Format: byte * @description This image is used for finding products. * * The image will be temporarily stored on the server-side, enabling subsequent requests to omit the image. * In that case, the `requestId` must be set in the request. * * When sending, it should be either the base64-encoded image or a data URL containing an image in base64 encoding. * * @example iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABHNCSVQICAgIfAhkiAAAACxJREFUCJkFwQENACAMBLEjwQMOZvMxg4H5QAgqjpZGfZHSeRmwxGyg9Bgb/YMgFBc0Hx5MAAAAAElFTkSuQmCC */ image?: string; /** * Format: uri * @description URL of the image to use for finding products. * Either `image` or `url` must be provided. If both are given, `image` takes precedence. * When using a URL, `highResolutionImage` is not needed and will be ignored, * as the image is fetched server-side at full resolution. * * @example https://example.com/product-image.jpg */ url?: string; /** * Format: byte * @description In addition to the `image`, a high resolution image can be uploaded to ensure accurate results when using a search area. * Before sending a high resolution image, we recommend to send a small image initially to have results early. * * When sending, it should be either the base64-encoded image or a data URL containing an image in base64 encoding. * * Ignored when `url` is used. * * @example iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABHNCSVQICAgIfAhkiAAAACxJREFUCJkFwQENACAMBLEjwQMOZvMxg4H5QAgqjpZGfZHSeRmwxGyg9Bgb/YMgFBc0Hx5MAAAAAElFTkSuQmCC */ highResolutionImage?: string; /** * @description The search area defines a region within the image; * the results will be based on this region instead of the entire image. * * If a high resolution image has been uploaded, the search area will be based on the high resolution image. */ searchArea?: components["schemas"]["rectangle"]; }; resultsCount?: components["schemas"]["resultsCount"]; campaign?: components["schemas"]["campaign-id"]; staticFilters?: components["schemas"]["request-static-filters"]; dynamicFilters?: components["schemas"]["request-dynamic-filters"]; objectDetection?: components["schemas"]["request-object-detection"]; }; "product-listing-page-request": { requestId?: components["schemas"]["request-id"]; resultsCount?: components["schemas"]["resultsCount"]; campaign?: components["schemas"]["campaign-id"]; staticFilters?: components["schemas"]["request-static-filters"]; dynamicFilters?: components["schemas"]["request-dynamic-filters"]; }; "text-search-response": { requestId?: components["schemas"]["request-id"]; data?: { products: components["schemas"]["response-products"]; /** @deprecated */ interactions?: components["schemas"]["interactions"]; }; interactions?: components["schemas"]["interactions"]; stream?: components["schemas"]["stream"]; }; "auto-suggest-request": { /** @example sneak */ query: string; }; "auto-suggest-response": { data: { /** @example sneak */ query: string; completions: components["schemas"]["query-completion"][]; }; }; "query-completion": { /** @example sneakers */ suggestion: string; /** * Format: uri * @example https://www.example.com/sneakers */ url?: string | null; }; "visual-search-response": { requestId?: components["schemas"]["request-id"]; data?: { products: components["schemas"]["response-products"]; }; interactions?: components["schemas"]["interactions"]; stream?: components["schemas"]["stream"]; }; "product-listing-page-response": { data?: { products: components["schemas"]["response-products"]; }; interactions?: components["schemas"]["interactions"]; }; "label-value-item": { value: components["schemas"]["category-path"] | components["schemas"]["succinct-color-filter-response"] | components["schemas"]["full-color-filter-response"] | string | number; /** @example Tische */ label: string; }; "filter-kind": "categorical" | "interval"; "categorical-filter-value-item": components["schemas"]["label-value-item"] & ({ /** @example true */ active: boolean; selected: boolean; } & { value: unknown; label: unknown; }); "interval-selected-values": components["schemas"]["interval"][]; "interval-filter-values": { value: components["schemas"]["interval-filter-value-item"]; /** @example Tische */ label: string; /** @example true */ active: boolean; }; "response-categorical-filter-item": { type: components["schemas"]["filter-kind"]; /** @example product_type */ column: string; /** @example Product Type */ label: string; /** @example true */ isPrimary: boolean; values: components["schemas"]["categorical-filter-value-item"][]; }; "response-interval-filter-item": { type: components["schemas"]["filter-kind"]; /** @example price */ column: string; /** @example Price */ label: string; /** @example true */ isPrimary: boolean; full: components["schemas"]["interval"]; selectedValues: components["schemas"]["interval-selected-values"]; suggestions: components["schemas"]["interval-filter-values"][]; histogram: components["schemas"]["interval-filter-values"][]; }; "request-dynamic-filter-item": { /** @example product_type */ column: string; values: components["schemas"]["category"] | components["schemas"]["string-list"] | components["schemas"]["interval-list"] | components["schemas"]["color-list-includes-rgb-code"] | components["schemas"]["color-list"]; }; "response-dynamic-filters": (components["schemas"]["response-categorical-filter-item"] | components["schemas"]["response-interval-filter-item"])[]; /** * @description The dynamic filters are parameters that refine the already narrowed down dataset from the `staticFilters` based on real-time request criteria. * These filters are flexible and can be adjusted dynamically to specific user queries or requirements, allowing for further granular filtering. * They provide a more precise result based on the user's immediate needs. */ "request-dynamic-filters": components["schemas"]["request-dynamic-filter-item"][]; "request-object-detection": { /** @description if true, objects in the image will be detected and returned as suggested search areas */ include: boolean; }; /** * @description The static filters are predefined parameters that set the initial scope for the data retrieval process. * These filters are configured to extract a broad, meaningful set of results based on your criteria. * Once applied, they help in reducing the dataset to a manageable and relevant subset before any further, more granular filtering occurs via `dynamicFilters`. */ "request-static-filters": { excluded?: components["schemas"]["excluded"]; included?: components["schemas"]["included"]; }; interactions: { dynamicFilters: components["schemas"]["response-dynamic-filters"]; suggestedSearchAreas?: components["schemas"]["suggested-search-area"][]; redirect?: components["schemas"]["redirect"]; }; "suggested-search-area": { rectangle: components["schemas"]["rectangle"]; }; redirect: { /** * Format: uri * @description The URL to which the user should be redirected. * @example https://www.example.com/some-category */ url: string; }; /** * @description A stream guides a user to fulfilling an intent by providing precise and relevant insights. * * The engine behind a stream can be likened to an assistant that continuously observes the user's actions and tries to reconcile it with the product catalog. * As soon as the imagined assistant sees an opportunity to help, it provides stream items. * They can be presented to the user in a chat-like interface and be acted upon by the user. * Alternatively, they can be processed automatically, to act on unambiguous, high-confidence suggestions. * * An important distinction to interactions is a stream's requirement for precision and a higher threshold for relevance: * For the former, the interactions might contain multiple filters with many options, whereas a stream would suggest only a single filter with ideally only one option. * For the latter, an interaction might contain filter options that are unlikely to be relevant, whereas a stream would never suggest such options. * That is, the interactions give the user the full flexibility to explore, whereas a stream guides the user by focusing on an intent. */ stream: { items: components["schemas"]["stream-item"][]; }; "stream-item": { role: components["schemas"]["role"]; parts: components["schemas"]["stream-part"][]; }; /** * @description A stream involves multiple actors, each with a different purpose and capabilities. * They are distinguished by their `role` in the stream: * * * The `assistant` is the part of the system that drives the stream, usually by means of AI. * * Items produced by the `system` initiate the stream's context, usually, by defining the assistant's goals, means and limitations. * * The `user` is the person who interacts with the system, e.g., a customer. * * The `client` receives the stream and processes it for the user. * This can be as simple as rendering the stream in a chat interface; * or as complex as reacting automatically to stream items, e.g., by automatically applying a filter. * * The distinction between `user`, `client` and `assistant` is crucial: * It allows to produce effects on the frontend that are not initiated by the user, but requested by the assistant. * Likewise, information from the frontend can flow to the assistant, without involving the user. * * @example assistant */ role: "assistant" | "system" | "user" | "client"; "stream-part": { text?: components["schemas"]["context"]; inlineData?: components["schemas"]["blob"]; functionCall?: components["schemas"]["function-call"]; functionResponse?: components["schemas"]["function-response"]; fileData?: components["schemas"]["file-data"]; }; /** * @description A context item summarizes the current situation and informs about next steps. * It is composed of text (`content`) and structured data (`annotations`), intended for the `user` and `client`, respectively. * With this separation, the content can be arranged in a human-readable way, without any need for further processing. * However, the client can use an annotation to replace its referenced part of the content with a more meaningful representation, e.g., product cards. */ context: { /** * Format: markdown * @description The content is human-readable markdown text, intended for the user. * @example You are looking for a couch. We have two categories that might be of particular interest to you: * * * [Lounge](https://www.example.com/lounge) * * [Divan](https://www.example.com/divan) * * They represent different kinds of couches. */ content: string; annotations: components["schemas"]["context-annotation"][]; }; /** * @description A context annotation provides structured information about a specific part of a context's content. * * The `locator` describes the part of the text that the annotation refers to. * The `data` contains the structured information related to the part referred to by the annotation, e.g., the part's contained products. * The `interactions` describe how the user can interact with the annotation or its parts, e.g., by setting a filter when clicking on a card. */ "context-annotation": { /** @description This object describes the location of what the annotation refers to. */ locator: { /** * @description The position of the annotation's first character in the text * @example 98 */ start: number; /** * @description The annotation's length in the text * @example 83 */ length: number; }; data: components["schemas"]["context-annotation-data-products"]; interactions: components["schemas"]["interactions"]; }; "context-annotation-data-products": { /** @example products */ type: "products"; items: components["schemas"]["response-product-item"][]; }; /** @description A `blob` is used to transfer binary data within a stream, e.g., an image uploaded by the user. */ blob: { /** @example image/png */ mimeType?: string; /** * Format: base64 * @example iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABHNCSVQICAgIfAhkiAAAACxJREFUCJkFwQENACAMBLEjwQMOZvMxg4H5QAgqjpZGfZHSeRmwxGyg9Bgb/YMgFBc0Hx5MAAAAAElFTkSuQmCC */ data?: string; }; /** * @description A `function-call` represents an invocation of a function. * * In most cases, a function is executed by the assistant, e.g., to predict a category based on the user's input. * However, a function can also be executed by the client, e.g., to automatically set a filter. * In that case, the assistant can only request the client to execute a function. * To do so, the assistant needs to be aware of the functions supported by the client. */ "function-call": { /** @description If set, the result of this function call is required to have the same id. */ id?: string; /** @description The name of the function to be called. */ name: string; args?: { [key: string]: unknown; }; }; /** * @description A `function-response` contains the result of a function call. * * The client can show the structured data in the response in a more meaningful way, e.g., by using a dedicated UI component. */ "function-response": { /** @description If a function call has an id, the function response must use the same id. */ id?: string; /** @description The name of the function that was called. */ name: string; response: { [key: string]: unknown; }; }; /** @description `file-data` references an uploaded file in a stream, thus avoiding to repeatedly sending the same file. */ "file-data": { /** @example image/png */ mimeType?: string; /** * Format: uri * @example https://example.com/path/to/file.png */ fileUri?: string; }; "request-substitutions": { category?: components["schemas"]["category"]; price?: components["schemas"]["price"]; }; "response-substitutions": components["schemas"]["response-substitution-item"][]; "response-substitution-item": { column: "product_type" | "google_product_category" | "price"; value: components["schemas"]["label-value-item"] | components["schemas"]["label-value-item"][]; }; "value-list": { /** @example brand */ column?: string; /** @example Nike,Puma */ values?: string[]; }; /** @example Nike,Puma */ "string-list": string[]; "succinct-color-filter-response": { /** @example beige */ value: string; /** @example beige */ name: string; }; "full-color-filter-response": components["schemas"]["succinct-color-filter-response"] & { /** @example #C7B3A8 */ hexCode?: string; rgb?: components["schemas"]["rgb"]; /** @example beige */ family?: string; } & { value: unknown; name: unknown; hexCode: unknown; rgb: unknown; family: unknown; }; rgb: { /** @example 199 */ red?: number; /** @example 179 */ green?: number; /** @example 168 */ blue?: number; }; /** @example black > #1A1A1A,beige > #C7B3A8 */ "color-list-includes-rgb-code": string[]; /** @example black,beige */ "color-list": string[]; "interval-filter-value-item": { frequency?: number; interval?: components["schemas"]["interval"]; }; "interval-list": components["schemas"]["interval"][]; /** @description The interval object that is defined by a [start, end). */ interval: { start?: number; end?: number; }; "visual-product-recommendations": { /** @example b56764137ca959da9541bb28c1987d6c,b5685a5230f5050475f214b4bb0e239b,b56c560872da93602ff88c7267eb4774,d861ad687c60820255dbf8f88516f24d */ bestFits?: string[]; extended?: components["schemas"]["response-products"]; }; "predict-product": { attributes?: string[]; }; "predicted-product": { /** * @description the id of the product to which the predictions belong * @example 0010020000VR */ id: string; /** @description each object represents a field of the product with its predicted value */ attributes: components["schemas"]["predicted-attribute"][]; /** @description each object represents an image of the product with its predicted fields */ images: components["schemas"]["predicted-image"][]; }; "predicted-image": { /** * @description the url that identifies the image * @example https://www.example.org/image.jpg */ url: string; /** @description each object represents an attribute of the image with its predicted value */ attributes: components["schemas"]["predicted-attribute"][]; }; /** @description this object contains a prediction for an attribute */ "predicted-attribute": { /** * @description the attribute's name * @example color */ name: string; /** * @description the attribute's known value (according to the product catalog) * @example red */ value: unknown | null; /** * @description the attribute's predicted value * @example orange */ prediction: unknown | null; /** * @description the value that was confirmed by a user * @example peach */ confirmed?: unknown | null; }; "delete-product-images-by-productId": { /** @example 25 */ "site-id"?: number; /** @example 100258 */ "product-id"?: string; /** @example 1,2 */ "image-ids"?: unknown[]; }; }; responses: { /** detected objects response */ "ion-detected-objects": { content: { "application/json": components["schemas"]["ion-detected-objects"]; }; }; /** success */ "visual-product-search": { content: { "application/json": components["schemas"]["response-products"]; }; }; /** success */ "ion-visual-product-search": { content: { "application/json": components["schemas"]["ion-visual-product-search"]; }; }; /** success */ "visual-product-recommendation": { content: { "application/json": components["schemas"]["visual-product-recommendations"]; }; }; /** OK */ "similar-products": { content: { "application/json": components["schemas"]["similar-products-response"]; }; }; /** OK */ "cross-selling": { content: { "application/json": components["schemas"]["cross-selling-response"]; }; }; /** OK */ "text-search": { content: { "application/json": components["schemas"]["text-search-response"]; }; }; /** OK */ "auto-suggest": { content: { "application/json": components["schemas"]["auto-suggest-response"]; }; }; /** OK */ "visual-search": { content: { "application/json": components["schemas"]["visual-search-response"]; }; }; /** OK */ "product-listing-page": { content: { "application/json": components["schemas"]["product-listing-page-response"]; }; }; /** Authentication Error */ "authentication-error": { content: { "application/json": unknown; }; }; /** Authorization Error */ "authorization-error": { content: { "application/json": unknown; }; }; /** Generic Error */ "generic-error": { content: { "application/json": { message?: string; }; }; }; }; parameters: { "product-id": components["schemas"]["product-id"]; "campaign-id": components["schemas"]["campaign-id"]; campaigns: string; "image-code": components["schemas"]["image-code"]; /** @deprecated */ color: components["schemas"]["color"]; excluded: string[]; category: components["schemas"]["category"]; }; requestBodies: { /** Product data object */ "product-annotation": { content: { "application/json": { data?: components["schemas"]["product-data"]; images?: components["schemas"]["product-annotation-images"][]; }; }; }; /** Similar Products request body */ "similar-products": { content: { "application/json": components["schemas"]["similar-products-request"]; }; }; /** Cross Selling request body */ "cross-selling": { content: { "application/json": components["schemas"]["cross-selling-request"]; }; }; /** Text Search request body */ "text-search": { content: { "application/json": components["schemas"]["text-search-request"]; }; }; /** Auto Suggest request body */ "auto-suggest": { content: { "application/json": components["schemas"]["auto-suggest-request"]; }; }; /** Visual Search request body */ "visual-search": { content: { "application/json": components["schemas"]["visual-search-request"]; }; }; /** Product listing page request body */ "product-listing-page": { content: { "application/json": components["schemas"]["product-listing-page-request"]; }; }; }; } export interface operations { /** Creates a new product or updates an existing one */ SetProduct: { parameters: { path: { "product-id": components["parameters"]["product-id"]; }; }; responses: { /** success */ 200: { content: { "application/json": components["schemas"]["product-annotation"]; }; }; /** Could not save or publish the product */ 400: { content: { "application/json": components["schemas"]["product-annotation-error"]; }; }; 401: components["responses"]["authentication-error"]; 403: components["responses"]["authorization-error"]; }; requestBody: components["requestBodies"]["product-annotation"]; }; /** Deletes product and its images from a site on a given product id */ DeleteProduct: { parameters: { path: { "product-id": components["parameters"]["product-id"]; }; }; responses: { /** success */ 200: { content: { "application/json": { /** @example success */ message?: string; data?: components["schemas"]["delete-product-images-by-productId"]; }; }; }; /** Could not delete the image */ 400: { content: { "application/json": { /** @example Could not delete the image */ message?: string; data?: components["schemas"]["delete-image-error"]; /** @example exception message */ debug?: string; }; }; }; 401: components["responses"]["authentication-error"]; 403: components["responses"]["authorization-error"]; /** Unable to find any image of the product */ 404: { content: { "application/json": { /** @example Unable to find any image of the product. */ message?: string; data?: components["schemas"]["delete-image-error"]; }; }; }; }; }; /** * This endpoint allows to discover products similar to the source product, usually chosen by a user. * The response contains a list of similarities for each product. */ GetSimilarProducts: { responses: { 200: components["responses"]["similar-products"]; 400: components["responses"]["generic-error"]; 401: components["responses"]["authentication-error"]; 403: components["responses"]["authorization-error"]; 404: components["responses"]["generic-error"]; 422: components["responses"]["generic-error"]; }; requestBody: components["requestBodies"]["similar-products"]; }; /** * This endpoint suggests related products based on a source product, usually chosen by a user. * The response contains a list of suggestions for each product. */ GetCrossSellingProducts: { responses: { 200: components["responses"]["cross-selling"]; 400: components["responses"]["generic-error"]; 401: components["responses"]["authentication-error"]; 403: components["responses"]["authorization-error"]; 404: components["responses"]["generic-error"]; 422: components["responses"]["generic-error"]; }; requestBody: components["requestBodies"]["cross-selling"]; }; /** * This endpoint allows you to search with text query in textual attributes and visual features. * The response contains the search result for each product. */ TextSearchProducts: { responses: { 200: components["responses"]["text-search"]; 401: components["responses"]["authentication-error"]; 403: components["responses"]["authorization-error"]; }; requestBody: components["requestBodies"]["text-search"]; }; /** This endpoint provides auto-suggested search queries based on a partial text input. */ AutoSuggest: { responses: { 200: components["responses"]["auto-suggest"]; 401: components["responses"]["generic-error"]; 403: components["responses"]["generic-error"]; }; requestBody: components["requestBodies"]["auto-suggest"]; }; /** * This endpoint allows you to search with an image in visual features and textual attributes. * The response contains the search result for each product. */ VisualSearchProducts: { responses: { 200: components["responses"]["visual-search"]; 401: components["responses"]["authentication-error"]; 403: components["responses"]["authorization-error"]; }; requestBody: components["requestBodies"]["visual-search"]; }; /** Starts a reusable search session for a one image. */ CreateSearchSession: { parameters: { query: { "campaign-id"?: components["parameters"]["campaign-id"]; "excluded[]"?: components["parameters"]["excluded"]; }; }; responses: { 200: components["responses"]["ion-visual-product-search"]; /** ProductSearch exception */ 400: { content: { "application/json": unknown; }; }; 401: components["responses"]["authentication-error"]; 403: components["responses"]["authorization-error"]; }; requestBody: { content: { "multipart/form-data": { /** Format: binary */ image: string; }; }; }; }; /** Starts a search in existing session. */ SearchInExistingSession: { parameters: { path: { "search-id": string; }; query: { "campaign-id"?: components["parameters"]["campaign-id"]; }; }; responses: { 200: components["responses"]["ion-visual-product-search"]; /** ProductSearch exception */ 400: { content: { "application/json": unknown; }; }; 401: components["responses"]["authentication-error"]; 403: components["responses"]["authorization-error"]; }; }; /** Get detected objects of image in existing session. */ DetectObjectsOfImageInExistingSession: { parameters: { path: { "search-id": string; }; query: { "campaign-id"?: components["parameters"]["campaign-id"]; }; }; responses: { 200: components["responses"]["ion-detected-objects"]; /** ProductSearch exception */ 400: { content: { "application/json": unknown; }; }; 401: components["responses"]["authentication-error"]; 403: components["responses"]["authorization-error"]; }; }; /** Upload high resolution image to existing session. */ UploadHighResolutionImageToExistingSession: { parameters: { path: { "search-id": string; }; query: { "campaign-id"?: components["parameters"]["campaign-id"]; }; }; responses: { /** success */ 200: { content: { "application/json": { /** @example success */ message?: string; }; }; }; /** ProductSearch exception */ 400: { content: { "application/json": unknown; }; }; 401: components["responses"]["authentication-error"]; 403: components["responses"]["authorization-error"]; }; }; /** * This endpoint returns a list of filtered products. * The response contains the products. */ ProductListingPage: { responses: { 200: components["responses"]["product-listing-page"]; 401: components["responses"]["authentication-error"]; 403: components["responses"]["authorization-error"]; }; requestBody: components["requestBodies"]["product-listing-page"]; }; /** * This endpoint predicts the fields of a single product, already existing in your product catalog. * In addition to the fields of the products, the response also contains information about the product's images. */ predictProductAttributes: { parameters: { path: { "product-id": components["parameters"]["product-id"]; }; }; responses: { /** OK */ 200: { content: { "application/json": components["schemas"]["predicted-product"]; }; }; 400: components["responses"]["generic-error"]; 401: components["responses"]["authentication-error"]; 403: components["responses"]["authorization-error"]; 404: components["responses"]["generic-error"]; 422: components["responses"]["generic-error"]; 500: components["responses"]["generic-error"]; }; requestBody: { content: { "application/json": components["schemas"]["predict-product"]; }; }; }; /** * This endpoint allows to discover products similar to the source product, usually chosen by a user. * The response contains a list of similarities for each product. */ GetSimilarProductsToInputImage: { parameters: { path: { "product-id": components["parameters"]["product-id"]; }; query: { "similar-products-count"?: components["schemas"]["resultsCount"]; campaigns?: components["parameters"]["campaigns"]; "image-code"?: components["parameters"]["image-code"]; /** @deprecated */ color?: components["parameters"]["color"]; "excluded[]"?: components["parameters"]["excluded"]; "category[]"?: components["parameters"]["category"]; }; }; responses: { 200: components["responses"]["visual-product-recommendation"]; 400: components["responses"]["generic-error"]; 401: components["responses"]["authentication-error"]; 403: components["responses"]["authorization-error"]; }; }; /** * This endpoint suggests related products based on a source product, usually chosen by a user. * The response contains a list of suggestions for each product. */ GetCrossSellingProductsToInputImage: { parameters: { path: { "product-id": components["parameters"]["product-id"]; }; query: { "cross-selling-products-count"?: components["schemas"]["resultsCount"]; campaigns?: components["parameters"]["campaigns"]; "image-code"?: components["parameters"]["image-code"]; /** @deprecated */ color?: components["parameters"]["color"]; "excluded[]"?: components["parameters"]["excluded"]; }; }; responses: { 200: components["responses"]["visual-product-recommendation"]; 400: components["responses"]["generic-error"]; 401: components["responses"]["authentication-error"]; 403: components["responses"]["authorization-error"]; }; }; } export interface external { }