# ProductBundles

ProductBundles object

## Get product bundles

> This operation returns a list of product bundles. Product bundles are groups of products that can have a fixed price and are always sold together as combo meals.\
> \
> \*\*Note:\*\* This operation needs \[Authentication]\(../guidelines/authentication.md) and supports the following JSON:API features:\
> \
> \- \[Relationships]\(../guidelines/relationships.md) - \`productBundleItems\` using \`include\` query parameter.\
> \- \[Sparse fieldsets]\(../guidelines/sparse-fieldsets.md) - supports all fields of \`productBundle\` and related resources with \`fields\` query parameter.<br>

```json
{"openapi":"3.1.0","info":{"title":"POS API","version":"1.0.0"},"tags":[{"name":"ProductBundles","description":"ProductBundles object"}],"servers":[{"url":"https://api.mews.com/pos","description":"Production"},{"url":"https://api.mews-demo.com/pos","description":"Staging"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"auth-scheme","description":"Bearer HTTP authentication. Allowed headers-- Authorization: Bearer <api_key>"}},"parameters":{"page_size":{"in":"query","name":"page[size]","schema":{"type":"integer","format":"int32","minimum":1,"maximum":1000},"description":"The number of resources to return in a single response.","required":false},"page_before":{"in":"query","name":"page[before]","schema":{"type":"string","title":"Resource identifier","description":"Unique identifier.","pattern":"^[a-zA-Z0-9-]+$","minLength":1,"maxLength":36},"description":"The cursor for the previous page of resources.","required":false},"page_after":{"in":"query","name":"page[after]","schema":{"type":"string","title":"Resource identifier","description":"Unique identifier.","pattern":"^[a-zA-Z0-9-]+$","minLength":1,"maxLength":36},"description":"The cursor for the next page of resources.","required":false},"filter_updated_at_gt":{"in":"query","name":"filter[updatedAtGt]","description":"Filters the objects that were updated after a specified datetime.","required":false,"schema":{"anyOf":[{"type":"string","description":"Timestamp in RFC 3339 format.","maxLength":25,"format":"date-time"},{"type":"string","description":"Date in RFC 3339 format.","maxLength":10,"format":"date"}]}},"filter_updated_at_gteq":{"in":"query","name":"filter[updatedAtGteq]","description":"Filters the objects that were updated after or on a specified datetime.","required":false,"schema":{"anyOf":[{"type":"string","description":"Timestamp in RFC 3339 format.","maxLength":25,"format":"date-time"},{"type":"string","description":"Date in RFC 3339 format.","maxLength":10,"format":"date"}]}},"fields_product_bundles":{"in":"query","name":"fields[productBundles]","schema":{"type":"array","maxItems":7,"items":{"type":"string","enum":["name","description","imageUrl","priceRange","retailPriceInclTax","createdAt","updatedAt"]}},"description":"Fields query parameter to allow the client to customize which fields should be returned for product bundles.","required":false}},"headers":{"x_rate_limit_limit":{"description":"The number of allowed requests in the current period.","schema":{"type":"integer","format":"int32","minimum":1,"maximum":1000}},"x_rate_limit_remaining":{"description":"The number of remaining requests in the current period.","schema":{"type":"integer","format":"int32","minimum":1,"maximum":1000}},"x_rate_limit_reset":{"description":"The time at which the rate limit resets, in UTC epoch seconds.","schema":{"type":"integer","format":"int64","minimum":1633036800,"maximum":2147483647}},"access_control_allow_origin":{"description":"Specifies which origins are allowed to access the resource.","schema":{"type":"string","minLength":1,"maxLength":1024,"pattern":"^[A-Za-z /*]+$"}},"retry_after":{"description":"The time the client should wait before making a new request.","schema":{"type":"integer","format":"int32","minimum":1,"maximum":3600}}},"schemas":{"product_bundles":{"product_bundles_response":{"type":"object","properties":{"data":{"type":"array","description":"The document's \"primary data\".","maxItems":1000,"items":{"$ref":"#/components/schemas/product_bundles/product_bundle"}},"included":{"type":["array","null"],"maxItems":1000,"description":"Details of the product bundle items related to the product bundle.","items":{"$ref":"#/components/schemas/product_bundles/product_bundle_item"}},"links":{"$ref":"#/components/schemas/links"}},"required":["data","links"]},"product_bundle":{"type":"object","properties":{"id":{"type":"string","format":"uuid","title":"Resource identifier","description":"Universally unique ID (UUID) that identifies the related object.","minLength":36,"maxLength":36},"type":{"type":"string","description":"The [type](https://jsonapi.org/format/#document-resource-object-identification) member is used to describe resource objects that share common attributes and relationships.","const":"productBundles"},"attributes":{"type":"object","description":"An [attributes object](https://jsonapi.org/format/#document-resource-object-attributes) representing some of the resource's data.","properties":{"name":{"type":"string","description":"Name of the product bundle.","minLength":0,"maxLength":255,"pattern":"^[A-Za-z0-9,-_. ]+$"},"description":{"type":["string","null"],"description":"Description of the product bundle.","minLength":0,"maxLength":10000,"pattern":"^[A-Za-z0-9,-_. ]+$"},"imageUrl":{"type":["string","null"],"description":"URL of the product bundle image.","minLength":0,"maxLength":1024,"format":"uri"},"priceRange":{"type":["object","null"],"description":"Price range of the bundle when not using fixed pricing. Contains minimum and maximum prices.","properties":{"min":{"type":"string","description":"Minimum price in the range.","maxLength":255,"pattern":"^[0-9]+\\.[0-9]{2}$"},"max":{"type":"string","description":"Maximum price in the range.","maxLength":255,"pattern":"^[0-9]+\\.[0-9]{2}$"}},"required":["min","max"]},"retailPriceInclTax":{"type":["string","null"],"description":"Retail price including tax of the bundle when using fixed pricing.","minLength":0,"maxLength":255,"pattern":"^[0-9]+\\.[0-9]{2}$"},"createdAt":{"type":"string","description":"Created at timestamp in RFC 3339 format.","maxLength":25,"format":"date-time"},"updatedAt":{"type":"string","description":"Updated at timestamp in RFC 3339 format.","maxLength":25,"format":"date-time"}},"required":["name","description","createdAt","updatedAt"]},"relationships":{"type":"object","description":"A [relationships object](https://jsonapi.org/format/#document-resource-object-relationships) describing relationships between the resource and other JSON:API resources.","properties":{"productBundleItems":{"type":"object","description":"Details of the product bundle items associated with the bundle.","properties":{"data":{"type":"array","maxItems":1000,"items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","title":"Resource identifier","description":"Universally unique ID (UUID) that identifies the related object.","minLength":36,"maxLength":36},"type":{"type":"string","description":"The [type](https://jsonapi.org/format/#document-resource-object-identification) member is used to describe resource objects that share common attributes and relationships.","const":"productBundleItems"}},"required":["id","type"]}}},"required":["data"]}}}},"required":["id","type","attributes"]},"product_bundle_item":{"type":"object","properties":{"id":{"type":"string","format":"uuid","title":"Resource identifier","description":"Universally unique ID (UUID) that identifies the related object.","minLength":36,"maxLength":36},"type":{"type":"string","description":"The [type](https://jsonapi.org/format/#document-resource-object-identification) member is used to describe resource objects that share common attributes and relationships.","const":"productBundleItems"},"attributes":{"type":"object","description":"An [attributes object](https://jsonapi.org/format/#document-resource-object-attributes) representing some of the resource's data.","properties":{"retailPriceInclTax":{"type":"string","description":"Price of the item within the bundle.","minLength":0,"maxLength":255,"pattern":"^[0-9]+\\.[0-9]{2}$"},"groupName":{"type":"string","description":"Name of the group this item belongs to within the bundle.","minLength":0,"maxLength":255,"pattern":"^[A-Za-z0-9,-_. ]+$"},"createdAt":{"type":"string","description":"Created at timestamp in RFC 3339 format.","maxLength":25,"format":"date-time"},"updatedAt":{"type":"string","description":"Updated at timestamp in RFC 3339 format.","maxLength":25,"format":"date-time"}},"required":["retailPriceInclTax","groupName","createdAt","updatedAt"]},"relationships":{"type":"object","description":"A [relationships object](https://jsonapi.org/format/#document-resource-object-relationships) describing relationships between the resource and other JSON:API resources.","properties":{"product":{"type":"object","description":"Details of the product associated with this bundle item.","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid","title":"Resource identifier","description":"Universally unique ID (UUID) that identifies the related object.","minLength":36,"maxLength":36},"type":{"type":"string","description":"The [type](https://jsonapi.org/format/#document-resource-object-identification) member is used to describe resource objects that share common attributes and relationships.","const":"products"}},"required":["id","type"]}},"required":["data"]},"productVariant":{"type":"object","description":"Details of the product variant associated with this bundle item (nullable).","properties":{"data":{"type":["object","null"],"properties":{"id":{"type":"string","format":"uuid","title":"Resource identifier","description":"Universally unique ID (UUID) that identifies the related object.","minLength":36,"maxLength":36},"type":{"type":"string","description":"The [type](https://jsonapi.org/format/#document-resource-object-identification) member is used to describe resource objects that share common attributes and relationships.","const":"productVariants"}},"required":["id","type"]}},"required":["data"]}},"required":["product","productVariant"]}},"required":["id","type","attributes","relationships"]}},"links":{"type":"object","description":"A [links object](https://jsonapi.org/profiles/ethanresnick/cursor-pagination/#auto-id-links) describing cursor pagination links.","properties":{"prev":{"type":["string","null"],"format":"uri","maxLength":1024,"description":"The link to the previous page of results."},"next":{"type":["string","null"],"format":"uri","maxLength":1024,"description":"The link to the next page of results."}},"required":["next","prev"]},"error":{"type":"object","description":"A JSON:API error object.\n\nAdditional properties specific to the problem type may be present.    \n","properties":{"errors":{"type":"array","description":"An array of error details to accompany a problem details response.","maxItems":1000,"items":{"type":"object","description":"An object to provide explicit details on a problem towards an API consumer.","properties":{"id":{"type":"string","maxLength":16,"description":"A unique identifier for this particular occurrence of the problem.","pattern":"^[A-Za-z0-9_-]+$"},"status":{"type":"string","maxLength":3,"description":"The HTTP status code applicable to this problem, expressed as a string value.","pattern":"^[1-5][0-9]{2}$"},"code":{"type":"string","maxLength":50,"description":"An application-specific error code, expressed as a string value.","pattern":"^[A-Za-z0-9_-]+$"},"title":{"type":"string","description":"A short, human-readable summary of the problem that SHOULD NOT change from occurrence to occurrence of the problem, except for purposes of localization.","maxLength":256,"pattern":"^.{1,255}$"},"detail":{"type":"string","description":"A human-readable explanation specific to this occurrence of the problem. Like title, this field's value can be localized.","maxLength":1024,"pattern":"^.{1,1023}$"},"source":{"type":"object","properties":{"pointer":{"type":"string","description":"A JSON Pointer to a specific request body property that is the source of error.","maxLength":1024,"pattern":"^$|^/([A-Za-z0-9_-]+/)*[A-Za-z0-9_-]+$"},"parameter":{"type":"string","description":"A string indicating which URI query parameter caused the error.","maxLength":1024,"pattern":"^[A-Za-z0-9_]+$"},"header":{"type":"string","description":"The name of the header that is the source of error.","maxLength":1024,"pattern":"^[A-Za-z-]+$"}}},"meta":{"type":"object","description":"Additional information about the error.","additionalProperties":true}},"required":["title"]}}},"required":["errors"]}},"responses":{"bad_request":{"description":"Bad request.","headers":{"X-Rate-Limit-Limit":{"$ref":"#/components/headers/x_rate_limit_limit"},"X-Rate-Limit-Remaining":{"$ref":"#/components/headers/x_rate_limit_remaining"},"X-Rate-Limit-Reset":{"$ref":"#/components/headers/x_rate_limit_reset"},"Access-Control-Allow-Origin":{"$ref":"#/components/headers/access_control_allow_origin"}},"content":{"application/vnd.api+json":{"schema":{"type":"object","$ref":"#/components/schemas/error"}}}},"unauthorized":{"description":"Unauthorized.","headers":{"X-Rate-Limit-Limit":{"$ref":"#/components/headers/x_rate_limit_limit"},"X-Rate-Limit-Remaining":{"$ref":"#/components/headers/x_rate_limit_remaining"},"X-Rate-Limit-Reset":{"$ref":"#/components/headers/x_rate_limit_reset"},"Access-Control-Allow-Origin":{"$ref":"#/components/headers/access_control_allow_origin"}},"content":{"application/vnd.api+json":{"schema":{"type":"object","$ref":"#/components/schemas/error"}}}},"unprocessable_entity":{"description":"Unprocessable entity.","headers":{"X-Rate-Limit-Limit":{"$ref":"#/components/headers/x_rate_limit_limit"},"X-Rate-Limit-Remaining":{"$ref":"#/components/headers/x_rate_limit_remaining"},"X-Rate-Limit-Reset":{"$ref":"#/components/headers/x_rate_limit_reset"},"Access-Control-Allow-Origin":{"$ref":"#/components/headers/access_control_allow_origin"}},"content":{"application/vnd.api+json":{"schema":{"type":"object","$ref":"#/components/schemas/error"}}}},"too_many_requests":{"description":"Too many requests.","headers":{"X-Rate-Limit-Limit":{"$ref":"#/components/headers/x_rate_limit_limit"},"X-Rate-Limit-Remaining":{"$ref":"#/components/headers/x_rate_limit_remaining"},"X-Rate-Limit-Reset":{"$ref":"#/components/headers/x_rate_limit_reset"},"Retry-After":{"$ref":"#/components/headers/retry_after"},"Access-Control-Allow-Origin":{"$ref":"#/components/headers/access_control_allow_origin"}},"content":{"application/vnd.api+json":{"schema":{"type":"object","$ref":"#/components/schemas/error"}}}},"internal_server_error":{"description":"Internal Server Error.","content":{"application/vnd.api+json":{"schema":{"type":"object","$ref":"#/components/schemas/error"}}}},"service_unavailable":{"description":"Service is unavailable.","headers":{"X-Rate-Limit-Limit":{"$ref":"#/components/headers/x_rate_limit_limit"},"X-Rate-Limit-Remaining":{"$ref":"#/components/headers/x_rate_limit_remaining"},"X-Rate-Limit-Reset":{"$ref":"#/components/headers/x_rate_limit_reset"},"Access-Control-Allow-Origin":{"$ref":"#/components/headers/access_control_allow_origin"}},"content":{"application/vnd.api+json":{"schema":{"type":"object","$ref":"#/components/schemas/error"}}}}}},"paths":{"/v1/product-bundles":{"get":{"summary":"Get product bundles","description":"This operation returns a list of product bundles. Product bundles are groups of products that can have a fixed price and are always sold together as combo meals.\n\n**Note:** This operation needs [Authentication](../guidelines/authentication.md) and supports the following JSON:API features:\n\n- [Relationships](../guidelines/relationships.md) - `productBundleItems` using `include` query parameter.\n- [Sparse fieldsets](../guidelines/sparse-fieldsets.md) - supports all fields of `productBundle` and related resources with `fields` query parameter.\n","operationId":"getProductBundles","parameters":[{"$ref":"#/components/parameters/page_size"},{"$ref":"#/components/parameters/page_before"},{"$ref":"#/components/parameters/page_after"},{"$ref":"#/components/parameters/filter_updated_at_gt"},{"$ref":"#/components/parameters/filter_updated_at_gteq"},{"$ref":"#/components/parameters/fields_product_bundles"},{"in":"query","name":"include","schema":{"type":"array","maxItems":1,"items":{"type":"string","enum":["productBundleItems"]}},"description":"Include query parameter to allow the client to customize which related resource should be returned.","required":false},{"in":"query","name":"fields[productBundleItems]","schema":{"type":"array","maxItems":4,"items":{"type":"string","enum":["retailPriceInclTax","groupName","createdAt","updatedAt"]}},"description":"Fields query parameter to allow the client to customize which fields should be returned for product bundle items.","required":false}],"tags":["ProductBundles"],"responses":{"200":{"description":"Successful response with product bundles data in JSON:API format.","headers":{"X-Rate-Limit-Limit":{"$ref":"#/components/headers/x_rate_limit_limit"},"X-Rate-Limit-Remaining":{"$ref":"#/components/headers/x_rate_limit_remaining"},"X-Rate-Limit-Reset":{"$ref":"#/components/headers/x_rate_limit_reset"},"Access-Control-Allow-Origin":{"$ref":"#/components/headers/access_control_allow_origin"}},"content":{"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/product_bundles/product_bundles_response"}}}},"400":{"$ref":"#/components/responses/bad_request"},"401":{"$ref":"#/components/responses/unauthorized"},"422":{"$ref":"#/components/responses/unprocessable_entity"},"429":{"$ref":"#/components/responses/too_many_requests"},"500":{"$ref":"#/components/responses/internal_server_error"},"503":{"$ref":"#/components/responses/service_unavailable"}}}}}}
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.mews.com/pos-api/operations/productbundles.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
