> ## Documentation Index > Fetch the complete documentation index at: https://docs.mapp.com/llms.txt > Use this file to discover all available pages before exploring further. # return facetted recommendations for a user > The facetted recommendations api allows retrieval of the most recommended garments for a user. The result set can be filtered by specifying one or more filters. Optionally retrieval of information about the number of hits for other values of the filter are returned The currently recognized aggregations are - garment_category - brand - occasion - must_have - retailer_labels (previously known as retailer_categories): significance dependent on the retailer and your product data - store: if Mapp Fashion has been provided with per-store availability data, this filters or aggregates on availability by store - feature_ids (Mapp Fashion feature ids) - not_features_ids (Mapp Fashion feature ids). This returns results without any of the listed feature ids - price - reduced_by (range filter that accepts values from 0 to 100) - season: filters or aggregates on the season a garment belongs to. Allowed season codes are of the form `ss_YYYY` (spring/summer) or `aw_YYYY` (autumn/winter), e.g. `ss_2024`, `aw_2024` The retailer_labels aggregation allows you to query against fields in your product data consumed by Mapp Fashion (these should be agreed with Mapp Fashion) For example to request a garment category of 1 (dresses) submit ``` { "facets": [ { "name": "garment_category", "value": [1] } ] } ``` Multiple values can be passed for a single filter, these will be or-ed. For example, to select garments that have all of - feature id 1 or 2, - feature id 3 or 4 submit ``` { "facets": [ { "name": "feature_ids", "filters": [ {"value": [1,2]}, {"value": [3,4]} ] } ] } ``` Multiple filters can be passed, these will be and-ed (Specifying multiple filters with the same name is not supported) For example, to return items matching a specific retailer label and available from a specific store, submit ``` { "facets": [ { "name": "retailer_labels", "value": [1,2] }, { "name": "store", "value": ["storeID1","storeID2"] } ] } ``` If the size for a facet is set to non 0, count information will be returned about other filter values. Conceptually, the count returned in an agggregation bucket is the number of results you would get if the query was filtered by that aggregation value. Numerical facets use a slightly different syntax, for example ``` { "facets": [ { "name": "price", "filters": [ { "from": 50, "to": 100 } ], "ranges": [ {"to": 50}, {"from": 50, "to": 100}, {"from": 100} ] } ] } ``` returns items whose price between 50 (inclusive) and 100 and the number of results within each of the indicated price ranges. ``` { "facets": [ { "name": "reduced_by", "filters": [ { "from": 30 } ] } ] } ``` Returns items reduced by at least 30% ``` { "facets": [ { "name": "season", "filters": [ {"value": ["ss_2026"]} ] } ] } ``` Returns items belonging to the Spring/Summer 2026 season Depending on the garment_format requested, extra fields may be present on the garment, however `garment_id` and `raw_garment_id` will always be present ## OpenAPI ````json POST /recommendations/facetted { "openapi": "3.0.4", "info": { "title": "Mapp Fashion API", "description": "Mapp Fashion recommendation API.\n\n**Host:** there is no shared API host. A dedicated host is configured per partner and supplied during onboarding. All paths below are relative to that host.\n\nTwo versions are available in parallel. **v1** (`/api/...`) covers the established endpoints and is fully maintained, with no deprecation planned. **v2** (`/api/v2/...`) standardizes the inputs and provides one endpoint per recommendation type. New integrations should use v2 wherever a v2 endpoint exists. See Recommendation Strategy for which endpoint to use when.\n", "version": "13" }, "servers": [ { "url": "/api" } ], "security": [ { "api_key": [] }, { "api_key": [], "user_token": [] } ], "tags": [ { "name": "Items", "description": "Operations for retrieving recommendations or items related to one or more seed items" }, { "name": "Items (v2)", "description": "v2: one endpoint per recommendation type, identifiers passed as parameters" }, { "name": "Recommendations", "description": "Operations about recommendations" }, { "name": "Recommendations (v2)", "description": "v2: facetted recommendations in the v2 response format" }, { "name": "Authorization", "description": "Operations for obtaining or refreshing JWTs" } ], "paths": { "/recommendations/facetted": { "post": { "tags": [ "Recommendations" ], "summary": "return facetted recommendations for a user", "description": "The facetted recommendations api allows retrieval of the most recommended garments for a user.\nThe result set can be filtered by specifying one or more filters. Optionally retrieval of information\nabout the number of hits for other values of the filter are returned\n\nThe currently recognized aggregations are\n\n- garment_category\n- brand\n- occasion\n- must_have\n- retailer_labels (previously known as retailer_categories): significance dependent on the retailer and your product data\n- store: if Mapp Fashion has been provided with per-store availability data, this filters or aggregates on availability by store\n- feature_ids (Mapp Fashion feature ids)\n- not_features_ids (Mapp Fashion feature ids). This returns results without any of the listed feature ids\n- price\n- reduced_by (range filter that accepts values from 0 to 100)\n- season: filters or aggregates on the season a garment belongs to. Allowed season codes are of the form `ss_YYYY` (spring/summer) or `aw_YYYY` (autumn/winter), e.g. `ss_2024`, `aw_2024`\n\nThe retailer_labels aggregation allows you to query against fields in your product data consumed by Mapp Fashion (these should\nbe agreed with Mapp Fashion)\n\nFor example to request a garment category of 1 (dresses) submit\n\n```\n{\n \"facets\": [\n {\n \"name\": \"garment_category\",\n \"value\": [1]\n }\n ]\n}\n```\n\nMultiple values can be passed for a single filter, these will be or-ed.\n\nFor example, to select garments that have all of\n\n- feature id 1 or 2,\n- feature id 3 or 4\n\nsubmit\n```\n{\n \"facets\": [\n {\n \"name\": \"feature_ids\",\n \"filters\": [\n {\"value\": [1,2]},\n {\"value\": [3,4]}\n ]\n }\n ]\n}\n```\n\nMultiple filters can be passed, these will be and-ed (Specifying multiple filters with the same name is not supported)\nFor example, to return items matching a specific retailer label and available from a specific store, submit\n\n```\n{\n \"facets\": [\n {\n \"name\": \"retailer_labels\",\n \"value\": [1,2]\n },\n {\n \"name\": \"store\",\n \"value\": [\"storeID1\",\"storeID2\"]\n }\n ]\n}\n```\n\n\nIf the size for a facet is set to non 0, count information will be returned about other filter values. Conceptually, the count returned in an agggregation bucket is the number of results you would get if the query was filtered by that aggregation value.\n\nNumerical facets use a slightly different syntax, for example\n\n```\n{\n \"facets\": [\n {\n \"name\": \"price\",\n \"filters\": [\n {\n \"from\": 50,\n \"to\": 100\n }\n ],\n \"ranges\": [\n {\"to\": 50},\n {\"from\": 50, \"to\": 100},\n {\"from\": 100}\n ]\n }\n ]\n}\n```\nreturns items whose price between 50 (inclusive) and 100 and the number of results within each of the indicated price ranges.\n\n\n```\n{\n \"facets\": [\n {\n \"name\": \"reduced_by\",\n \"filters\": [\n {\n \"from\": 30\n }\n ]\n }\n ]\n}\n```\n\nReturns items reduced by at least 30%\n\n\n```\n{\n \"facets\": [\n {\n \"name\": \"season\",\n \"filters\": [\n {\"value\": [\"ss_2026\"]}\n ]\n }\n ]\n}\n```\n\nReturns items belonging to the Spring/Summer 2026 season\n\n\nDepending on the garment_format requested, extra fields may be present on the garment, however `garment_id` and `raw_garment_id`\nwill always be present\n", "operationId": "postRecommendationsFacetted", "parameters": [ { "name": "garment_format", "in": "query", "description": "The desired response format.\n\nThe response includes a description of the outfits / similar items but no data on the items themselves: since these may be repeated within the response, garment data is provided separately in the response.\n\nThe `detailed` format includes the most amount of item metadata (name, description, price etc).\n\nThe `document` format only includes item identifiers, and if requested Mapp Fashion generated information about the item, such as predicted size.\n\nThe `retailer_ids` format only returns the item identifiers.\n", "schema": { "enum": [ "detailed", "document", "retailer_ids" ], "type": "string", "default": "retailer_ids" } }, { "name": "fields", "in": "query", "description": "**Deprecated.** This parameter still returns data, but the logic behind it is no longer maintained and it has no v2 equivalent. Do not rely on it for new integrations.\n\nA list of garment attributes to fetch. Only supported for garment_format=document or detailed. Retailer specific custom fields are named `x-` and may be requested in addition to the values listed here - contact Mapp Fashion for details", "schema": { "type": "array", "items": { "enum": [ "size", "why", "verdict", "recommendedness", "features", "occasions", "garment_category_id", "owned", "department", "eans" ], "type": "string" } } }, { "name": "pretty", "in": "query", "description": "If true, pretty print JSON output. This increases response size and should usually be off in production environments\n", "schema": { "type": "boolean", "default": false } }, { "name": "include_dressipi_ids", "in": "query", "description": "Controls whether Mapp Fashion garment ids (raw_garment_id) are included in response\n", "schema": { "type": "boolean", "default": true } }, { "name": "page", "in": "query", "description": "The page from which to start results\n", "schema": { "type": "integer", "format": "int32", "default": 1 } }, { "name": "per_page", "in": "query", "description": "The number of result to return per page\n", "schema": { "type": "integer", "format": "int32", "default": 12 } }, { "name": "device_type", "in": "query", "description": "A device type identifier. This allows segmenting a/b test statistics\nin the same way as you do.\n", "schema": { "type": "string" } }, { "name": "locale", "in": "query", "description": "A locale parameter describing what stock information to use and what language to return text in (if applicable). This parameter will only\nfunction if the corresponding information is in your product data & processed accordingly. If stock local and UI language are not the same,\nspecify the language parameter in addition to this one.\n", "schema": { "type": "string" } }, { "name": "language", "in": "query", "description": "Allows you to specify a locale used for product attributes such as product name that should be localized using a different locale to price &\nstock information. This parameter will only function if the corresponding information is in your product data & processed accordingly.\n", "schema": { "type": "string" } }, { "name": "season", "in": "query", "description": "Restricts the results to garments for the given season, written as `ss_` or `aw_` followed by the year, for example `aw_2025`.\n", "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/postRecommendationsFacetted" } } }, "required": true, "x-bodyName": "RecommendationsFacetted" }, "responses": { "200": { "description": "Information about the recommended garments", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/FacettedRecommendationsResponse" } } } }, "400": { "$ref": "#/components/responses/InvalidParams" }, "403": { "$ref": "#/components/responses/InvalidJwt" }, "422": { "description": "error message", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "$ref": "#/components/responses/ServerError" } } } } }, "components": { "schemas": { "postRecommendationsFacetted": { "type": "object", "properties": { "root_event_id": { "type": "string", "description": "When requesting the 2nd or later pages of recommendations, provide the root_event_id from the previous page" }, "facets": { "type": "array", "items": { "required": [ "name" ], "type": "object", "properties": { "name": { "enum": [ "garment_category", "occasion", "must_have", "retailer_categories", "retailer_labels", "feature_ids", "not_feature_ids", "brand", "price", "store", "reduced_by", "product_ids", "season" ], "type": "string", "description": "The name of the facet. `retailer_categories` is deprecated, use `retailer_labels` instead." }, "value": { "type": "array", "items": { "type": "string", "default": "1" }, "description": "The values to filter by (deprecated in favor of the filters parameter)" }, "size": { "type": "integer", "description": "The number of facet entries to retrieve. The feature_ids and not_feature_ids facets do not support non zero sizes", "format": "int32", "default": 0 }, "filters": { "type": "array", "items": { "type": "object", "properties": { "value": { "type": "array", "items": { "type": "string" }, "description": "the array of permitted values", "example": [ "1", "2", "3" ] }, "from": { "type": "array", "items": { "type": "integer", "format": "int32" }, "description": "for numerical facets, the minimum value" }, "to": { "type": "array", "items": { "type": "integer", "format": "int32" }, "description": "for numerical facets, the maximum value" }, "identifier_type": { "enum": [ "dressipi-id", "product-code", "ancillary-product-code" ], "type": "string", "description": "the type of identifiers in the `value` of a filter with name `name`, default is `'product-code'` when unspecified" } } }, "description": "An array of filters, that will be added together. Each filter has a value property which is the array of values to match against" }, "ranges": { "type": "array", "items": { "type": "object", "properties": { "from": { "type": "integer", "format": "int64" }, "to": { "type": "integer", "format": "int64" } } }, "description": "For numerical facets, a list of ranges for which to retrieve counts" }, "identifier_type": { "enum": [ "dressipi-id", "product-code", "ancillary-product-code" ], "type": "string", "description": "the type of identifiers in the `value` of a filter with name `name`, default is `'product-code'` when unspecified" } } } } }, "description": "return facetted recommendations for a user" }, "FacettedRecommendationsResponse": { "required": [ "event_id", "content_id", "recommendations", "facets", "pagination" ], "type": "object", "properties": { "event_id": { "type": "string", "description": "An event id. This should be used when posting events relating to this dataset.", "example": "5a621005c2c9adc12e1192b7" }, "currency": { "type": "string", "description": "The currency the prices in this response are expressed in, resolved from the requested locale (the default currency if no locale is given). Null if your product data contains no currency", "nullable": true, "example": "GBP" }, "reparentable": { "type": "boolean", "description": "If true, the eventid should be posted to /events/{id}/reparent" }, "content_id": { "type": "string", "description": "An opaque identifier identifying this section of the response. This should be used when posting events relating to an item in this outfit.", "example": "5a621005c2c9adc12e1192b7" }, "recommendations": { "type": "array", "items": { "$ref": "#/components/schemas/Garment" }, "description": "The recommended items" }, "facets": { "type": "array", "items": { "$ref": "#/components/schemas/Facet" }, "description": "The requested facet information" }, "pagination": { "$ref": "#/components/schemas/Pagination" }, "available_skus": { "type": "array", "items": { "$ref": "#/components/schemas/AvailableSkus" }, "description": "The variant SKUs of the recommended items that are still in stock, one entry per item. An empty array when none are known.\n\nOnly reliable if the variant IDs are maintained in the Product Catalog and the products have their real product images from the first import on. Products imported with placeholder images or dummy URLs can receive SKUs of other products." }, "warnings": { "type": "array", "items": { "type": "string" }, "description": "Warnings about ignored or adjusted request parameters" } }, "description": "Retrieve items that the user has previously liked filtered by garment category.\n\nFor example to request a garment category of 1 (dresses) submit\n\n```\n{\n \"facets\": [\n {\n \"name\": \"garment_category\",\n \"value\": [1]\n }\n ]\n}\n```\n", "example": { "event_id": "5b36697489560a0060000009", "currency": "GBP", "reparentable": false, "content_id": "5b36697489560a006000000a", "recommendations": [ { "garment_id": "01AC017NAV", "raw_garment_id": 4508067, "ancillary_product_code": "N-111", "garment_category_id": 42, "garment_category_name": "Dresses", "department": "female", "has_outfits": true, "has_extended_verdicts": true, "size": { "exact": [ "5", "UK 10" ], "plus_one": [ "6", "UK 12" ], "minus_one": [ "4", "UK 8" ] }, "verdict": true, "owned": false, "why": [ "A neat slim leg flatters your slender shape", "A hint of flare helps to balance out your shoulders." ], "occasions": [ "casual", "holiday" ], "recommendedness": { "score": 8, "reason": "Good for you" }, "features": [ { "id": 1, "name": "Basic", "feature_category_name": "Wardrobe" }, { "id": 2, "name": "A/W 2020", "feature_category_name": "Season" } ], "feed_image_urls": [ "https://assets.retailer.com/images/01AC017NAV", "https://assets.retailer.com/images/01AC017NAV" ], "eans": [ "ABCD01", "ABCD02", "ABCD03" ], "brand_name": "Some Brand", "retailer": "Some Retailer", "name": "Black Maxi dress", "price": "35.00 GBP", "old_price": "35.00 GBP", "url": "https://www.someretailer.com/dresses/01AC017NAV", "garment_status": "in stock", "custom_attributes": [ { "name": "retailer_specific_attribute_1", "value": "abcedfg", "array_value": [] } ] }, { "garment_id": "05AC011MUL", "raw_garment_id": 4508222, "ancillary_product_code": "M-222", "garment_category_id": 42, "garment_category_name": "Dresses", "department": "female", "has_outfits": true, "has_extended_verdicts": true, "size": { "exact": [ "5", "UK 10" ], "plus_one": [ "6", "UK 12" ], "minus_one": [ "4", "UK 8" ] }, "verdict": true, "owned": false, "why": [ "A neat slim leg flatters your slender shape", "A hint of flare helps to balance out your shoulders." ], "occasions": [ "casual", "holiday" ], "recommendedness": { "score": 8, "reason": "Good for you" }, "features": [ { "id": 1, "name": "Basic", "feature_category_name": "Wardrobe" }, { "id": 2, "name": "A/W 2020", "feature_category_name": "Season" } ], "feed_image_urls": [ "https://assets.retailer.com/images/01AC017NAV", "https://assets.retailer.com/images/01AC017NAV" ], "eans": [ "ABCD01", "ABCD02", "ABCD03" ], "brand_name": "Some Brand", "retailer": "Some Retailer", "name": "Black Maxi dress", "price": "35.00 GBP", "old_price": "35.00 GBP", "url": "https://www.someretailer.com/dresses/01AC017NAV", "garment_status": "in stock", "custom_attributes": [ { "name": "retailer_specific_attribute_1", "value": "abcedfg", "array_value": [] } ] }, { "garment_id": "05AC018MUL", "raw_garment_id": 4508225, "ancillary_product_code": "M-333", "garment_category_id": 42, "garment_category_name": "Dresses", "department": "female", "has_outfits": true, "has_extended_verdicts": true, "size": { "exact": [ "5", "UK 10" ], "plus_one": [ "6", "UK 12" ], "minus_one": [ "4", "UK 8" ] }, "verdict": true, "owned": false, "why": [ "A neat slim leg flatters your slender shape", "A hint of flare helps to balance out your shoulders." ], "occasions": [ "casual", "holiday" ], "recommendedness": { "score": 8, "reason": "Good for you" }, "features": [ { "id": 1, "name": "Basic", "feature_category_name": "Wardrobe" }, { "id": 2, "name": "A/W 2020", "feature_category_name": "Season" } ], "feed_image_urls": [ "https://assets.retailer.com/images/01AC017NAV", "https://assets.retailer.com/images/01AC017NAV" ], "eans": [ "ABCD01", "ABCD02", "ABCD03" ], "brand_name": "Some Brand", "retailer": "Some Retailer", "name": "Black Maxi dress", "price": "35.00 GBP", "old_price": "35.00 GBP", "url": "https://www.someretailer.com/dresses/01AC017NAV", "garment_status": "in stock", "custom_attributes": [ { "name": "retailer_specific_attribute_1", "value": "abcedfg", "array_value": [] } ] } ], "facets": [ { "name": "garment_category", "buckets": [ { "id": "6", "name": "Tops", "count": 137 }, { "id": "8", "name": "Jeans", "count": 100 } ] } ], "pagination": { "total_pages": 13, "total_entries": 39, "current_page": 1 } } }, "Error": { "type": "object", "properties": { "error": { "type": "object", "properties": { "message": { "type": "string", "description": "A human readable error message" } } } }, "description": "Generic error object" }, "Garment": { "required": [ "garment_id" ], "type": "object", "properties": { "garment_id": { "type": "string", "description": "The `garment_id`. The type of identifier used depends on the requests' `garment_format`", "example": "ABC-123" }, "raw_garment_id": { "type": "integer", "description": "The internal Mapp Fashion id for the garment. This may be omitted depending on `garment_format`", "format": "int32", "example": 123456 }, "product_id": { "type": "string", "description": "The product level identifier the item belongs to (Product ID in the Product Catalog), grouping all its colors and sizes. Omitted if your product data contains no Product ID", "example": "TS30165" }, "ancillary_product_code": { "type": "string", "description": "An alternative identifier to identify the product, hidden when not provided in your product data", "example": "A1B2C3" }, "has_extended_verdicts": { "type": "boolean", "description": "Whether garment has extended verdicts. Only presents for verdicts/dislikes, also not present if format=retailer_ids", "example": true }, "has_outfits": { "type": "boolean", "description": "Whether outfits can be generated. not present if format=retailer_ids" }, "size": { "$ref": "#/components/schemas/Sizing" }, "why": { "type": "array", "items": { "type": "string" }, "description": "If whys have been requested & if the profile has shape data, a list of human readable reasons for recommendation" }, "verdict": { "type": "boolean", "description": "If verdicts have been requested, the approval status of the garment (true=like, false=dislike, nil=no verdict given)" }, "owned": { "type": "boolean", "description": "If owned has been requested, whether the use has previously purchased the product" }, "recommendedness": { "$ref": "#/components/schemas/Recommendedness" }, "features": { "type": "array", "items": { "$ref": "#/components/schemas/BasicFeature" }, "description": "If features have been requested, a list of whitelisted feature objects" }, "garment_category_id": { "type": "integer", "description": "The category id for the product.", "format": "int32" }, "department": { "type": "string", "description": "The garment department (female male girls boys)." }, "eans": { "type": "array", "items": { "type": "string" }, "description": "If eans have been requested, the array of eans present in your product data." }, "garment_category_name": { "type": "string", "description": "The category name for the product." }, "occasions": { "type": "array", "items": { "type": "string" }, "description": "Array of the product occasions. Only present if format=detailed, and only populated when `occasions` is requested via `fields`; otherwise the key may be returned as null. The possible values are `casual`, `evening`, `occasion`, `holiday`, `work` and `creative_work`", "nullable": true }, "retailer": { "type": "string", "description": "The retailer name for the product. Only present if format=detailed" }, "feed_image_urls": { "type": "array", "items": { "type": "string" }, "description": "The array of image_urls present in your product data. Only present if format=detailed" }, "brand_name": { "type": "string", "description": "The brand name for the product. Only present if format=detailed" }, "name": { "type": "string", "description": "The product name. Only present if format=detailed" }, "price": { "type": "string", "description": "The current price, as it appears in your product data. Only present if format=detailed" }, "old_price": { "type": "string", "description": "The previous price, as it appears in your product data. Only present if format=detailed" }, "url": { "type": "string", "description": "The URL for the PDP for the garment. Only present if format=detailed" }, "garment_status": { "type": "string", "description": "The status of the garment. Only present if format=detailed" }, "custom_attributes": { "type": "array", "items": { "$ref": "#/components/schemas/CustomAttribute" }, "description": "Product attributes, as agreed with Mapp Fashion" } }, "description": "Fetches information about a garment. The garment format is implicitly set to detailed.\n", "example": { "garment_id": "01AC017NAV", "raw_garment_id": 4508067, "ancillary_product_code": "N-1-D-1111", "garment_category_id": 42, "garment_category_name": "Dresses", "department": "female", "has_outfits": true, "has_extended_verdicts": true, "size": { "exact": [ "5", "UK 10" ], "plus_one": [ "6", "UK 12" ], "minus_one": [ "4", "UK 8" ] }, "verdict": true, "owned": false, "why": [ "A neat slim leg flatters your slender shape", "A hint of flare helps to balance out your shoulders." ], "occasions": [ "casual", "holiday" ], "recommendedness": { "score": 8, "reason": "Good for you" }, "eans": [ "ABCD01", "ABCD02", "ABCD03" ], "features": [ { "id": 1, "name": "Basic", "feature_category_name": "Wardrobe" }, { "id": 2, "name": "A/W 2020", "feature_category_name": "Season" } ], "feed_image_urls": [ "https://assets.retailer.com/images/01AC017NAV", "https://assets.retailer.com/images/01AC017NAV" ], "brand_name": "Some Brand", "retailer": "Some Retailer", "name": "Black Maxi dress", "price": "35.00 GBP", "old_price": "35.00 GBP", "url": "https://www.someretailer.com/dresses/01AC017NAV", "garment_status": "in stock", "custom_attributes": [ { "name": "retailer_specific_attribute_1", "value": "abcedfg", "array_value": [] } ] } }, "Facet": { "required": [ "name", "buckets" ], "type": "object", "properties": { "name": { "type": "string", "description": "The name of the facet", "example": "garment_category_id" }, "buckets": { "type": "array", "items": { "$ref": "#/components/schemas/Bucket" }, "description": "The returned buckets for the facet" } } }, "Pagination": { "type": "object", "properties": { "total_pages": { "type": "integer", "description": "The total number of pages that can be requested", "format": "int32" }, "total_entries": { "type": "integer", "description": "The total number of results that can be requested", "format": "int32" }, "current_page": { "type": "integer", "description": "The current page", "format": "int32" } } }, "AvailableSkus": { "required": [ "garment_id", "skus" ], "type": "object", "properties": { "garment_id": { "type": "string", "description": "The item the SKUs belong to, as returned in `garment_id`" }, "skus": { "type": "array", "items": { "type": "string" }, "description": "The variant SKUs of the item that are still in stock" } }, "description": "The in-stock variant SKUs of one recommended item.", "example": { "garment_id": "TS30165CHARCOALHB", "skus": [ "TS30165CHARCOALHB-S", "TS30165CHARCOALHB-M" ] } }, "Sizing": { "type": "object", "properties": { "exact": { "type": "array", "items": { "type": "string" }, "description": "Information about the recommended size" }, "plus_one": { "type": "array", "items": { "type": "string" }, "description": "Information about size immediately bigger than the recommended one (if available)" }, "minus_one": { "type": "array", "items": { "type": "string" }, "description": "Information about size immediately smaller than the recommended one (if available)" } } }, "Recommendedness": { "type": "object", "properties": { "score": { "type": "integer", "description": "A numerical score for the garment (out of 10)", "format": "int32" }, "reason": { "type": "string", "description": "A human readable interpretation of the score" } } }, "BasicFeature": { "type": "object", "properties": { "id": { "type": "integer", "description": "The id for the feature", "format": "int32", "example": 170 }, "name": { "type": "string", "description": "The human readable name for the feature", "example": "Plain Pattern" }, "feature_category_name": { "type": "string", "description": "The feature category of the feature", "example": "Pattern" } } }, "CustomAttribute": { "required": [ "name" ], "type": "object", "properties": { "name": { "type": "string", "description": "The name of the attribute" }, "value": { "type": "string", "description": "The value of the attribute (if string valued)" }, "array_value": { "type": "array", "items": { "type": "string" }, "description": "The value of the attribute (if array valued)" } } }, "Bucket": { "required": [ "count" ], "type": "object", "properties": { "id": { "type": "string", "description": "For non numeric facets, the id of the bucket, usable as search values in subsequent requests", "example": "1" }, "name": { "type": "string", "description": "For non numeric facets, a human readable description of the bucket", "example": "Dresses" }, "count": { "type": "integer", "description": "The approximate number of items matching the value", "format": "int32", "example": 19 }, "from": { "type": "number", "description": "For numeric facets, the lower endpoint of the bucket" }, "to": { "type": "number", "description": "For numeric facets, the upper endpoint of the bucket" } } } }, "responses": { "InvalidParams": { "description": "One or more parameter values are invalid", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "InvalidJwt": { "description": "Invalid JWT: a user token was supplied but could not be verified. Requests without a user token are not affected - they return non-personalized results", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "ServerError": { "description": "An internal error occurred. Retry the request. If the issue persists, contact Technical Support", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } }, "securitySchemes": { "api_key": { "type": "apiKey", "name": "x-api-key", "in": "header" }, "user_token": { "type": "apiKey", "description": "The JWT for the user. Optional: requests without a user token return non-personalized results. The header name is unchanged for backwards compatibility.", "name": "x-dressipi-jwt", "in": "header" } } } } ````