openapi: 3.0.2
info:
title: Miso Ask APIs Product / Content APIs API
description: '
# Overview
Miso’s approach to personalization is to train machine learning Engines on three core data sets:
1. Your site’s log of historical and real-time interactions,
2. Your catalog of products and content, and
3. Your users. Miso provides the output of its Engines to you, so you can build search and recommendation
experiences that are personalized down to the individual level (n=1 personalization).
To see how Miso works and explore the power of its Engines, we recommend following
[this tutorial](https://docs.askmiso.com/) to get
started with our Playground data. Integrating your site or application with Miso happens in three basic steps:
1. Upload your data
2. Train your Engines
3. Build search and recommendation experiences with the output of your Engines.
Miso provides two main integration points. The first is your [Dojo Dashboard](https://dojo.askmiso.com/),
which is used to set up your Engines with the conversions you want to optimize and your training schedule.
Dojo is also a great way to get familiar with Miso by manually uploading data and exploring the output of
Miso’s Engines. In Dojo’s Sandboxes, you can tweak your Engine settings and see visual examples of Miso’s search
and recommendations running on your live data.
The second integration point is Miso’s API, which lets you automatically manage your data in Miso and build
experiences that leverage the output of Miso’s personalization Engines.
Miso’s API is composed of two major groups of REST API endpoints: Data APIs and Engine APIs.
### Data APIs
Data APIs collect input to Miso''s personalization Engines. These APIs all support high-throughput
data ingestion through bulk insert, and satisfy GDPR and CCPA compliance by letting users delete their data
from Miso. Subcategories of Data APIs are:
* [Interaction APIs](#tag/Interaction-APIs), for managing your Interaction records. By uploading historical and real-time Interaction
records, you tell Miso how users are engaging with the products and content on your site, and in turn, Miso’s
Engines learn how to optimize your conversion funnels.
* [Product / Content APIs](#tag/Product-Content-APIs), for managing your Product / Content records. These records provide a deep semantic
understanding of your catalog and keep Miso up to date about your offerings so it can make smart and timely
suggestions. The `product_id` is how Miso links Product / Content records to your Interaction records.
* [User APIs](#tag/User-APIs), for managing your User records. These records tell Miso about your site’s users and visitors,
so Miso can build an understanding of user segmentation and behavior in relation to products and content.
The `user_id` is how Miso links User records to your Interaction records.
As a rule of thumb, we recommend batching up data to avoid timeout risks. For the Product / Content and User
Upload APIs, we recommend limiting each API upload call to about 100 records at a time. For the Interaction
Upload API, we recommend limiting your calls to around 10,000 records at a time.
### Engine APIs
Engine APIs provide the output of Miso''s personalization Engines. We designed these APIs with a focus on low
latency and high availability. Most of these APIs'' 95th percentile response time is under 75ms,
and the services are replicated to at least three separate instances for high availability.
The types of Engine APIs are:
* [Search APIs](#tag/Search-APIs), for getting Miso’s personalized search results for a user, with search-as-you-type and
autocompletion.
* [Recommendation APIs](#tag/Recommendation-APIs), for retrieving Miso’s recommendations that match users with
the products, categories, and product attributes that are likely to drive conversions.
# Authentication
[View your API Keys in your Dojo Dashboard.](https://dojo.askmiso.com/docs/api-browser)
There are three environments in Miso:
* **Playground**, a read-only tutorial environment with sample data.
* **Development**, for staging, QA, and experimentation.
* **Production**, where you run your live integration with Miso.
Access a Miso environment by passing in the corresponding API key in your API calls. There is one publishable
key and one secret key per environment.
API Key can passed with query parameter `api_key`, or using the `X-API-KEY` header.
'
version: 1.1.4
servers:
- url: https://api.askmiso.com
tags:
- name: Product / Content APIs
description: '
Miso''s Product / Content APIs let you upload, read, and delete Product / Content records that represent your site''s
catalog.
### Product / Content records
Miso analyzes your Product / Content records to provide personalized search and recommendations that connect users
with products or content on your site or application.
Much of Miso''s search and personalization capability relies on understanding your catalog in-depth and drawing
correlations between your catalog and your users'' consumption or purchasing behaviors. In other words, Miso
discovers that, with high correlation, users who are interested in certain product attributes would also be
interested in other products with similar or related attributes. (For simplicity, we will often overload the word
"products" to mean items for purchase if you are an eCommerce business, and content to consume if you are a content
marketplace.)
To fully optimize your search and recommendations, it is important to provide Miso with Product / Content records
that are complete and accurate. We define a set of common attributes that capture the basics of most eCommerce and
content media products, such as `title`, `description`, `categories`, `tags`, `material`, `authors`, etc.
If your products'' characteristics cannot be fully captured by these fields, we recommend that you specify
`custom_attributes`. For Miso, the more complete the product information is, the better its personalized search
and recommendations become.
'
paths:
/v1/products:
post:
tags:
- Product / Content APIs
summary: Product / Content Upload API
description: "Bulk API to insert Product records. This API endpoint accepts POST requests with JSON data\ncontaining a list of Product / Content records wrapped in a dictionary:\n```\nPOST /v1/products\n\n{\"data\": [product_1, product_2, product_3]}\n```\n\nEach product is uniquely identified by its `product_id`. If a record with the same `product_id`\nalready exists in the dataset, the existing one will be **replaced** by the insertion (no\npartial update is allowed at this time). We recommend limiting your calls to around 100\nrecords at a time to avoid memory issues or timeout risks.\n\n### Schema validation\nThis API validates the inserted records against the API schema; any schema error will cause\nthe whole request to fail (`status_code=422`), and none of the records will be inserted. You\nshould check the `response.errors` field to see if there are any errors. For example,\nthe response below means there are no errors (`status_code=200`):\n\n```json\n{\n \"message\": \"success\",\n \"data\": {\n \"task_id\": \"{task_id}\"\n }\n}\n```\n\nA common source of errors when uploading Product records is that the custom attributes' data\ntypes are not consistent with the data types of the existing records. In such cases,\nyou can check the individual error message in the `data` array. For example, if there is an\nerror regarding the second record you tried to insert, the response might look like:\n\n```json\n{\n \"errors\": true, // there are errors. please check!\n \"data\": [\n \"data.0.custom_attributes.designer is invalid. Its data type is not consistent with other records\",\n \"data.0.product_id is invalid. The attribute expected to be of type 'string', but 'array' is given.\",\n \"data.0.created_at is invalid. The attribute should match 'date-time' format.\"\n ]\n}\n```\n\n### Internationalization (I18N)\nMiso has the built-in support for majority of Western European languages, including `English`, `French`, `German`,\n`Spanish`, `Italian`, `Dutch`, `Russian`, and `Ukrainian`, as well as, major Asian languages, including `Mandarin`\n (both Simplified and Traditional), `Japanese`, and `Korean`.\n\nIn Dojo, you can choose the *Primary Language* for your product catalog (default is English).\nHowever, you can also have more than one language in your product catalog that is\nbeyond your primary languages using the `i18n_$LN` fields (replace `$LN` with the [two-letter language code](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) of your choice),\nand let Miso apply the language-specific preprocessing for you, such as tokenization, stemming, elision\nremoval, folding, decompounding, and traditional to simplified Chinese conversion.\n\nFor example, you may have a product called \"Arizona, Green Tea with Ginseng & Honey\" in your catalog, and you also\nsell it in your Spanish, French, and Chinese sites, and want your customers to be able to search for this product\nin their native languages.\n\nIn this case, your product records will like the following sample record, where English is the primary language of\nthe record, and `i18n_es`, `i18n_fr`, `i18n_zh` fields contain product details in their corresponding languages.\n```javascript\n{\n \"product_id\": \"arizona-ginseng-honey\",\n // the primary language is English\n \"title\": \"Arizona, Green Tea with Ginseng & Honey\",\n // ... other product details in English\n \"i18n_es\": {\n \"title\": \"AriZona, Té verde con ginseng y miel\"\n // ... other product details in Spanish\n },\n \"i18n_fr\": {\n \"title\": \"AriZona - Thé Vert Aromatisé au Miel\"\n // ... other product details in French\n },\n \"i18n_zh\": {\n \"title\": \"美國ARIZONA亞歷桑納 - 蜂蜜人蔘綠茶\"\n // ... other product details in Chinese\n }\n }\n```\nIn this way, your customer can find this product with any of the following search queries\nwithout additional configuration:\n* `arizona green tea`\n* `arizona te verde`\n* `arizona the vert`\n* `arizona 綠茶`\n\nThe similar concept applies to Autocomplete as well. You can specify a `language` parameter\nin the requests to Autocomplete API, and the autocomplete results for the specific language\nwill be returned."
operationId: content_write_api_v1_products_post
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/ProductBulkIn'
required: true
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/CreateResponse'
'400':
description: Bad Request
content:
application/json:
example:
'message:': Request timeout.
'401':
description: Unauthorized
content:
application/json:
example:
message: invalid api key.
'403':
description: Forbidden
content:
application/json:
example:
message: Request is denied due to bot blocking. Please only access this API from a real browser or use Secret API Key instead.
'422':
description: Unprocessable Entity
content:
application/json:
example:
errors: true
message: None of the records are inserted, because at least one of them contain schema errors. Please see `data` field for details.
data:
- data.0.product_id is invalid. The attribute expected to be of type 'string', but 'array' is given.
- data.0.created_at is invalid. The attribute should match 'date-time' format.
'500':
description: Internal Server Error
content:
application/json:
example:
message: Something went wrong. Please contact miso product team.
security:
- Secret API Key: []
/v1/products/{product_id}:
get:
tags:
- Product / Content APIs
summary: Product / Content Read API
description: "This API endpoint retrieves the details of a specific product / content using its `product_id`.\nTo fetch the product / content information, make a GET request to the following URL:\n\n**Notice**: Make sure the product_id is an urlencode string.\n\n```\nGET /v1/products/{product_id}\n```\n\nReplace `{product_id}` with the unique identifier of the product / content you wish to fetch.\n\n## Response Format\n\nThe API will return the product / content details in a JSON object if the given `product_id`\nis valid and exists in the system. The JSON object will include fields like `title`,\n`description`, `price`, `images`, and any internationalization fields (`i18n_$LN`).\n\n### Example Response\n\nHere's an example of a successful API response for a product / content with the `product_id`\n\"arizona-ginseng-honey\":\n\n```json\n{\n \"product_id\": \"arizona-ginseng-honey\",\n \"title\": \"Arizona, Green Tea with Ginseng & Honey\",\n \"description\": \"A refreshing and delicious blend of green tea with ginseng and honey.\",\n \"price\": 1.99,\n \"i18n_es\": {\n \"title\": \"AriZona, Té verde con ginseng y miel\"\n // ... other product details in Spanish\n },\n \"i18n_fr\": {\n \"title\": \"AriZona - Thé Vert Aromatisé au Miel\"\n // ... other product details in French\n },\n \"i18n_zh\": {\n \"title\": \"美國ARIZONA亞歷桑納 - 蜂蜜人蔘綠茶\"\n // ... other product details in Chinese\n }\n}\n```\n\nIf the provided `product_id` is invalid or does not exist in the system, the API will return\nan error response with a `status_code=404`.\n\n### Example Error Response\n```json\n{\n \"message\": \"not found\"\n}\n```"
operationId: content_read_api_v1_products__product_id__get
parameters:
- required: true
schema:
title: Product Id
maxLength: 512
type: string
name: product_id
in: path
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/ProductReadOut'
'401':
description: Unauthorized
content:
application/json:
example:
message: invalid api key.
'404':
description: Product not Found
content:
application/json:
example:
message: not found
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
'500':
description: Internal Server Error
content:
application/json:
example:
message: Something went wrong. Please contact miso product team.
security:
- Secret API Key: []
delete:
tags:
- Product / Content APIs
summary: Product / Content Delete API
description: "This API endpoint allows you to delete a specific product / content from the system using its\n`product_id`. To remove a product, make a DELETE request to:\n\n**Notice**: Make sure the product_id is an urlencode string.\n\n```\nDELETE /v1/products/{product_id}\n```\n\nReplace `{product_id}` with the unique identifier of the product / content you wish to delete.\n\n## Response Format\n\nThe API will return a JSON object indicating the success or failure of the deletion request.\nIf the deletion is successful, the `status_code` will be `200`, and the `message` field will\nconfirm the successful deletion.\n\n### Example Successful Deletion Response\n\n```json\n{\n \"message\": \"deleted\",\n \"data\": [\n {\n \"task_id\": \"{task_id}\"\n }\n ]\n}\n```\n\nTo check the exact response body of this task_id, make a GET request to the following endpoint:\n\n```\nGET /v1/products/_status/{task_id}\n```\n\nReplace `{task_id}` with the task_id returned from the response."
operationId: content_delete_api_v1_products__product_id__delete
parameters:
- required: true
schema:
title: Product Id
maxLength: 512
type: string
name: product_id
in: path
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/DeleteResponse'
'400':
description: Bad Request
content:
application/json:
example:
'message:': Request timeout.
'401':
description: Unauthorized
content:
application/json:
example:
message: invalid api key.
'403':
description: Forbidden
content:
application/json:
example:
message: Request is denied due to bot blocking. Please only access this API from a real browser or use Secret API Key instead.
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
'500':
description: Internal Server Error
content:
application/json:
example:
message: Something went wrong. Please contact miso product team.
security:
- Secret API Key: []
/v1/products/_ids:
get:
tags:
- Product / Content APIs
summary: Product / Content ID List API
description: "This API endpoint allows you to fetch the unique identifiers (product_ids) of all products\nstored in the app. To get a list of product_ids, make a GET request to the following URL:\n\n```\nGET /v1/products/_ids\n```\n\n## Response Format\n\nThe API will return an array of product_ids in a JSON object. The `status_code` will be `200`\nif the request is successful. If any error occurs during the request, the `status_code` will\nnot be `200` and the `message` field will indicate the error.\n\n### Example Successful Response\n\n```json\n{\n \"message\": \"success\",\n \"data\": {\n \"ids\": [\n \"product_1\",\n \"product_2\",\n \"product_3\",\n // ... more product_ids\n ]\n }\n}\n```\n\n### Example Error Response\n\nIf the dataset cannot be found, the API will return a `404` error:\n\n```json\n{\n \"status_code\": 404,\n \"message\": \"not found\"\n}\n```\n\nIf another error occurs during the request, the API will return a `500` error\n\n```json\n{\n \"message\": \"Something went wrong. Please contact miso product team.\"\n}\n```"
operationId: content_read_ids_api_v1_products__ids_get
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/ProductListOut'
'401':
description: Unauthorized
content:
application/json:
example:
message: invalid api key.
'500':
description: Internal Server Error
content:
application/json:
example:
message: Something went wrong. Please contact miso product team.
security:
- Secret API Key: []
/v1/products/_delete:
post:
tags:
- Product / Content APIs
summary: Product / Content Bulk Delete API
description: "This API endpoint allows you to delete multiple products by providing their product_ids.\n\nTo delete multiple products, make a POST request to the following URL:\n\n```\nPOST /v1/products/_delete\n```\n\nThe request body should contain a JSON object with an array of product_ids:\n\n```json\n{\n \"data\": {\n \"product_ids\": [\n \"product-1\",\n \"product-2\",\n // ... more product_ids to delete\n ]\n }\n}\n```\n\n## Response Format\n\nThe API will return a JSON object with a `message` and an array of `data`\ncontaining a `task_id` that can be used to get the status of the bulk deletion process.\n\n#### Example Successful Response\n\n```json\n{\n \"message\": \"deleted\",\n \"data\": {\n \"task_id\": \"{task_id}\"\n }\n}\n```\n\nTo check the exact response body of this task_id, make a GET request to the following endpoint:\n\n```\nGET /v1/products/_status/{task_id}\n```\n\nReplace `{task_id}` with the task_id returned from the response."
operationId: content_bulk_delete_api_v1_products__delete_post
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/ProductBulkDeleteIn'
required: true
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/DeleteResponse'
'400':
description: Bad Request
content:
application/json:
example:
'message:': Request timeout.
'401':
description: Unauthorized
content:
application/json:
example:
message: invalid api key.
'403':
description: Forbidden
content:
application/json:
example:
message: Request is denied due to bot blocking. Please only access this API from a real browser or use Secret API Key instead.
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
'500':
description: Internal Server Error
content:
application/json:
example:
message: Something went wrong. Please contact miso product team.
security:
- Secret API Key: []
components:
schemas:
ProductListOut:
title: ProductListOut
required:
- message
- data
type: object
properties:
message:
title: Message
type: string
data:
$ref: '#/components/schemas/ProductIds'
additionalProperties: false
ProductRecord:
title: ProductRecord
required:
- product_id
type: object
properties:
product_id:
title: Product Id
maxLength: 512
minLength: 1
type: string
description: "\nThe unique identifier for this product. The Id can be in any format you use in your product \ndatabase (e.g. the product's SKU, UPC, or UUID or serial number). We will use this Id to track how users \ninteract with products and content in the Interactions records you upload to Miso. It is important to keep the Id \nconsistent between two datasets. For products that have multiple variants, you should have a unique \n`product_id` for each variant, and use `product_group_id` to group them together.\n\nFor example, for a T-shirt with SKU `123ABC` that comes in 4 sizes: `S`, `M`, `L`, `XL`, we should create four different \nproducts:\n\n```\n{ \n \"product_id\": \"123ABC-S\",\n \"product_group_id\" \"123ABC\"\n}\n{ \n \"product_id\": \"123ABC-M\",\n \"product_group_id\" \"123ABC\"\n}\n{ \n \"product_id\": \"123ABC-L\",\n \"product_group_id\" \"123ABC\"\n}\n{ \n \"product_id\": \"123ABC-XL\",\n \"product_group_id\" \"123ABC\"\n}\n``` \n\n * Constraints\n * Can't contain `,`\n * Can't start with `_`\n * Length <= 512\n"
example: 123ABC-S-Black
product_group_id:
title: Product Group Id
type: string
description: "\nThe `product_group_id` is used to prevent the same product (but a different variant) from showing multiple \ntimes in the search or recommendation results. When one product has multiple variants (for example, different \nsizes, colors, or materials), you should assign a unique product_id to each variant, but assign the same \n`product_group_id` to all of them. If `product_group_id` is not given, we default to the value of `product_id`. \n"
example: 123ABC
parent_id:
title: Parent Id
type: string
description: "\nThe `parent_id` is used to declare a parent-child relationship between two \"Products\". \nSuch relationships are common in marketplaces and content media sites with user generated contents. \nFor example, an E-commerce marketplace (such as E-bay or Amazon) \nmay have \"Shops\" (as parents) and \"Merchandises\" \n(as children), and a social streaming site, such as YouTube, may have \"Channel\" (as parents) and \"Video\" (as children). In these sites, both entities can be modeled as \"Products\", and can both be returned in Search and Recommendation APIs.\n\nDeclaring the parent-child relationships allows Miso to automatically propagate interactions from one product to the other.\nFor example, when a user \"watch\" a \nVideo, Miso will propagate this signal to the \nChannel which publishes this Video, even if users do not directly interact with the Channel page. Such implicit \ninteractions\nare particularly useful when making recommendations for Channel because it gives Miso much more information \nabout users' interests to different Channels than solely relying on users' direct interactions with the \nthem, which happens less often. \n\n`parent_id` needs to be a non-empty string referring to the `product_id` of the parent product. \nThe parent product can be uploaded in a separate batch, and does not need to exist before its children products.\n\nThe implicit interactions will only exist during Miso's training process, and will not show up in the \nInteraction dataset.\n\n"
example: Nike_Shop_123
related_ids:
title: Related Ids
type: array
items:
type: string
description: The product_id or product_group_id of other products that are related to this Product
type:
title: Type
type: string
description: "\nThe `type` of product. This is for sites that have more than one type of product or content that they want their users \nto interact with. If your site has only one type of product, you can leave this field out. \nA classic example is travel sites, which have both *hotel* and *flight* sales. It is also useful for sites that let \nusers interact with products as well as *product bundles*. For example, on YouTube, each video is a product that users \ncan watch, while each channel, containing multiple videos, is also a product that users can subscribe to.\n\nFor model quality, it is preferable to model all these distinct product types in the same data set, so that a user's \ninterests for one type of product can inform their interests in another type of products. The `type` field helps Miso \nmake these distinctions.\n"
example: clothes
title:
title: Title
type: string
description: "\nThe title of the product. During a search, Miso will put predictive weight behind the title, \nbecause it is often the main way users identify a product.\n"
example: Japanese Shiba Inu Dog Eating Miso Soup T-Shirt
description:
title: Description
type: string
description: "\nThe `description` text of the product. Miso assumes `description` contains longer textual content than other \nstring-based fields. For example, term frequency matters more here than in a field like the title. Miso’s \nsemantic understanding can extract a lot of valuable information from having a product description that is \nplain-spoken and detailed. \n"
example: This cute Shiba inu dog eating Miso soup is perfect for those who love Japanese culture.
short_description:
title: Short Description
type: string
description: "\nThe `short_description` text of the product. Miso assumes `short_description` contains a shorter version \nor a summary of the `description` field.\n"
example: Cute Shiba Inu Dog Eating Miso Soup T-Shirt
language:
title: Language
minLength: 2
type: string
description: "\nThe `language` of the product description and content in [two-letter ISO 639-1 code](\nhttps://en.wikipedia.org/wiki/ISO_639-1). For example, English = `en`, Chinese = `zh`. \nMiso will use this field to determine the proper way to index the product description. If this field is not specified, \nwe will determine the language automatically. \n\nWe also use the language field to determine users’ interests in content of different languages. This is particularly \nimportant for content media sites that have different languages of content. \n\n* Constraints:\n * [Two-letter ISO 639-1 code](https://en.wikipedia.org/wiki/ISO_639-1). \n For example, English = `en`, Chinese = `zh`.\n"
example: en
created_at:
title: Created At
anyOf:
- type: string
format: date-time
- type: string
format: date
description: "\nThe time when the product was first created or became available on your site as an ISO-8601 date or datetime string. \n"
published_at:
title: Published At
anyOf:
- type: string
format: date-time
- type: string
format: date
description: "\nThe time when the product was published as an ISO-8601 date or datetime string. \n"
updated_at:
title: Updated At
anyOf:
- type: string
format: date-time
- type: string
format: date
description: "\nThe time when the product was updated as an ISO-8601 date or datetime string. \n"
categories:
title: Categories
type: array
items:
type: array
items:
type: string
description: "\nIn Miso, you describe a product or content category as a hierarchical list of strings from broad to narrow, \ncalled a `category`. (See the `category_page_view` interaction.) \n\nUse the `categories` field of products to specify the hierarchical category or categories that the product \nbelongs to. A product may belong to only a single `category`, or multiple. \n\nFor example, a product could be in both:\n * *Toys & Games > Toys > Dolls, Playsets & Toy Figures > Stuffed Animals*, and\n * *Arts & Entertainment > Hobbies & Creative Arts > Collectibles*. \n\n This field should be a list of a list of strings, where category levels go from broad to narrow, such as: \n\n```\n{\"categories\":\n [\n // the first category the product belongs to\n [\"TOYS & GAMES\", \"TOYS\", \"DOLLS, PLAYSETS & TOY FIGURES\", \"STUFFED ANIMALS\"],\n // the second category the product belongs to\n [\"ARTS & ENTERTAINMENT\", \"HOBBIES & CREATIVE ARTS\", \"COLLECTIBLES\"]\n ]\n}\n```\n\nIf your product taxonomy has only one single level, that is not an issue:\n```\n{\"categories\":\n [\n // the first category the product belongs to\n [\"Toys\"],\n // the second category the product belongs to\n [\"Collectibles\"]\n ]\n}\n```\n\nThe categories are optional, but very important for profiling the products and tracking users' preferences. \n(See also the `category_page_view` interaction)\n"
example:
- - Clothing, Shoes & Jewelry
- Women
- T-Shirts
- - Novelty
- Tops & Tees
- T-Shirts
tags:
title: Tags
type: array
items:
type: string
description: '
The tags that have been associated with the product.
For example:
```
{"tags": ["TAG_1",
# --- truncated at 32 KB (47 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/misoai/refs/heads/main/openapi/misoai-product-content-apis-api-openapi.yml