> For the complete documentation index, see [llms.txt](https://docs.hos.accessacloud.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.hos.accessacloud.com/atreemo-api/api-reference/atreemo-api-reference/product.md).

# Product

Api Methods for Product

## GET

> Retrieves products using the controller's product-name/code, group and brand filtering path and returns GETProductOutput. The source action accepts a complex ProductByParamsInput although this catalogue GET has no documented request body or query expansion. That binding/publication difference remains explicit; do not invent new query parameters or assume the unqualified GET matches every deployed version.

```json
{"openapi":"3.0.3","info":{"title":"Atreemo API","version":"0.1.0"},"tags":[{"name":"Product","description":"Api Methods for Product"}],"servers":[{"url":"https://apim-hospitality-dev-uksouth.azure-api.net/atreemo-api","description":"Local DEV APIM import draft only; not a deployed endpoint announcement."}],"security":[{"AtreemoBearer":[]}],"components":{"securitySchemes":{"AtreemoBearer":{"type":"http","scheme":"bearer","description":"Atreemo access token obtained by the caller from the Atreemo instance `POST /token` endpoint (OAuth2 password grant) and sent as `Authorization: Bearer <token>`. See the Authorisation guide."}},"schemas":{"GETProductOutput":{"type":"object","properties":{"Error":{"type":"string","description":"Error description"},"listProducts":{"type":"array","items":{"$ref":"#/components/schemas/Product"},"description":"Collection of Product"},"Response":{"type":"boolean","description":"The call status (if true so the relation was successfully added to CRM, if false an error has occured and you will find the description in the field \"Error\")"}}},"Product":{"type":"object","nullable":true,"properties":{"ProductCode":{"type":"string","nullable":true},"Description":{"type":"string","nullable":true},"Price":{"type":"number","format":"double"},"SearchTag":{"type":"string","nullable":true},"GroupID":{"type":"integer","format":"int32"},"GroupName":{"type":"string","nullable":true},"SubGroupID":{"type":"integer","format":"int32","nullable":true},"SubGroupName":{"type":"string","nullable":true},"Image":{"type":"string","nullable":true},"Stock":{"type":"number","format":"double"}},"description":"Source-backed JSON members, including inheritance and JSON naming/ignore attributes. No property is required solely because its CLR value type is non-nullable. Runtime and deployment alignment are unverified."}}},"paths":{"/api/Product/GET":{"get":{"operationId":"ProductGet","summary":"GET","tags":["Product"],"description":"Retrieves products using the controller's product-name/code, group and brand filtering path and returns GETProductOutput. The source action accepts a complex ProductByParamsInput although this catalogue GET has no documented request body or query expansion. That binding/publication difference remains explicit; do not invent new query parameters or assume the unqualified GET matches every deployed version.","responses":{"200":{"description":"OK (sample status in the public collection).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GETProductOutput"}}}}}}}}}
```

## GetProductGroups

> Retrieves product groups using GroupName and BrandID with the action's user/brand checks. Returns the listProductGroup payload beside Response and Error. Source defaults and URI binding must be considered separately from nullable value types; valid group and brand selections depend on the instance.

```json
{"openapi":"3.0.3","info":{"title":"Atreemo API","version":"0.1.0"},"tags":[{"name":"Product","description":"Api Methods for Product"}],"servers":[{"url":"https://apim-hospitality-dev-uksouth.azure-api.net/atreemo-api","description":"Local DEV APIM import draft only; not a deployed endpoint announcement."}],"security":[{"AtreemoBearer":[]}],"components":{"securitySchemes":{"AtreemoBearer":{"type":"http","scheme":"bearer","description":"Atreemo access token obtained by the caller from the Atreemo instance `POST /token` endpoint (OAuth2 password grant) and sent as `Authorization: Bearer <token>`. See the Authorisation guide."}},"schemas":{"ProductGroupOutput":{"type":"object","nullable":true,"properties":{"Response":{"type":"boolean"},"Error":{"type":"string","nullable":true},"listProductGroup":{"type":"array","items":{"$ref":"#/components/schemas/ProductGroup"},"nullable":true}},"description":"Source-backed JSON members, including inheritance and JSON naming/ignore attributes. No property is required solely because its CLR value type is non-nullable. Runtime and deployment alignment are unverified."},"ProductGroup":{"type":"object","nullable":true,"properties":{"GroupID":{"type":"integer","format":"int32"},"BrandID":{"type":"integer","format":"int32","nullable":true},"GroupName":{"type":"string","nullable":true}},"description":"Source-backed JSON members, including inheritance and JSON naming/ignore attributes. No property is required solely because its CLR value type is non-nullable. Runtime and deployment alignment are unverified."}}},"paths":{"/api/Product/GetProductGroups":{"get":{"operationId":"ProductGetProductGroups","summary":"GetProductGroups","tags":["Product"],"description":"Retrieves product groups using GroupName and BrandID with the action's user/brand checks. Returns the listProductGroup payload beside Response and Error. Source defaults and URI binding must be considered separately from nullable value types; valid group and brand selections depend on the instance.","parameters":[{"name":"GroupName","in":"query","schema":{"type":"string","nullable":true},"description":"Native query parameter. CLR string GroupName in the pinned controller signature.","required":true},{"name":"BrandID","in":"query","schema":{"type":"integer","format":"int32","nullable":true},"description":"Native query parameter. CLR int? BrandID in the pinned controller signature.","required":true}],"responses":{"200":{"description":"OK (sample status in the public collection).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductGroupOutput"}}}}}}}}}
```

## GetProductSubGroups

> Retrieves product subgroups for GroupID and returns the subgroup collection. Keep its collection shape distinct from the ProductGroupOutput envelope used by the neighbouring group lookup. Permission and exception paths can return HTTP errors rather than that collection.

```json
{"openapi":"3.0.3","info":{"title":"Atreemo API","version":"0.1.0"},"tags":[{"name":"Product","description":"Api Methods for Product"}],"servers":[{"url":"https://apim-hospitality-dev-uksouth.azure-api.net/atreemo-api","description":"Local DEV APIM import draft only; not a deployed endpoint announcement."}],"security":[{"AtreemoBearer":[]}],"components":{"securitySchemes":{"AtreemoBearer":{"type":"http","scheme":"bearer","description":"Atreemo access token obtained by the caller from the Atreemo instance `POST /token` endpoint (OAuth2 password grant) and sent as `Authorization: Bearer <token>`. See the Authorisation guide."}},"schemas":{"ProductSubGroup":{"type":"object","nullable":true,"properties":{"SubGroupID":{"type":"integer","format":"int32"},"BrandID":{"type":"integer","format":"int32","nullable":true},"GroupID":{"type":"integer","format":"int32"},"SubGroupName":{"type":"string","nullable":true}},"description":"Source-backed JSON members, including inheritance and JSON naming/ignore attributes. No property is required solely because its CLR value type is non-nullable. Runtime and deployment alignment are unverified."}}},"paths":{"/api/Product/GetProductSubGroups":{"get":{"operationId":"ProductGetProductSubGroups","summary":"GetProductSubGroups","tags":["Product"],"description":"Retrieves product subgroups for GroupID and returns the subgroup collection. Keep its collection shape distinct from the ProductGroupOutput envelope used by the neighbouring group lookup. Permission and exception paths can return HTTP errors rather than that collection.","parameters":[{"name":"GroupID","in":"query","schema":{"type":"integer","format":"int32"},"description":"Native query parameter. CLR int GroupID in the pinned controller signature.","required":true}],"responses":{"200":{"description":"OK (sample status in the public collection).","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ProductSubGroup"}}}}}}}}}}
```

## POST

> Submits a product list for database processing within the resolved brand context. The action builds a product table from the supplied fields and returns ProductApiOutput, including invalid-product details when reported. This is a product-data mutation; transactionality and replay behaviour are not established by the response schema.

```json
{"openapi":"3.0.3","info":{"title":"Atreemo API","version":"0.1.0"},"tags":[{"name":"Product","description":"Api Methods for Product"}],"servers":[{"url":"https://apim-hospitality-dev-uksouth.azure-api.net/atreemo-api","description":"Local DEV APIM import draft only; not a deployed endpoint announcement."}],"security":[{"AtreemoBearer":[]}],"components":{"securitySchemes":{"AtreemoBearer":{"type":"http","scheme":"bearer","description":"Atreemo access token obtained by the caller from the Atreemo instance `POST /token` endpoint (OAuth2 password grant) and sent as `Authorization: Bearer <token>`. See the Authorisation guide."}},"schemas":{"InputProductsList":{"type":"object","nullable":true,"properties":{"ProductsList":{"type":"array","items":{"$ref":"#/components/schemas/Product"},"nullable":true},"BrandID":{"type":"integer","format":"int32","nullable":true}},"description":"Source-backed JSON members, including inheritance and JSON naming/ignore attributes. No property is required solely because its CLR value type is non-nullable. Runtime and deployment alignment are unverified."},"Product":{"type":"object","nullable":true,"properties":{"ProductCode":{"type":"string","nullable":true},"Description":{"type":"string","nullable":true},"Price":{"type":"number","format":"double"},"SearchTag":{"type":"string","nullable":true},"GroupID":{"type":"integer","format":"int32"},"GroupName":{"type":"string","nullable":true},"SubGroupID":{"type":"integer","format":"int32","nullable":true},"SubGroupName":{"type":"string","nullable":true},"Image":{"type":"string","nullable":true},"Stock":{"type":"number","format":"double"}},"description":"Source-backed JSON members, including inheritance and JSON naming/ignore attributes. No property is required solely because its CLR value type is non-nullable. Runtime and deployment alignment are unverified."},"ProductApiOutput":{"type":"object","properties":{"Error":{"type":"string","description":"Error description"},"InvalidProductsList":{"type":"array","items":{"$ref":"#/components/schemas/InvalidProducts"},"description":"Invalid products details"},"Response":{"type":"boolean","description":"The status call"}}},"InvalidProducts":{"type":"object","nullable":true,"properties":{"GroupID":{"type":"integer","format":"int32"},"SubGroupID":{"type":"integer","format":"int32","nullable":true},"ErrorMessage":{"type":"string","nullable":true}},"description":"Source-backed JSON members, including inheritance and JSON naming/ignore attributes. No property is required solely because its CLR value type is non-nullable. Runtime and deployment alignment are unverified."}}},"paths":{"/api/Product/POST":{"post":{"operationId":"ProductPost","summary":"POST","tags":["Product"],"description":"Submits a product list for database processing within the resolved brand context. The action builds a product table from the supplied fields and returns ProductApiOutput, including invalid-product details when reported. This is a product-data mutation; transactionality and replay behaviour are not established by the response schema.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InputProductsList"}}}},"responses":{"200":{"description":"OK (sample status in the public collection).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductApiOutput"}}}}}}}}}
```

## PostProductGroup

> Requests creation of a product group by name in the resolved brand. The controller checks the group name and brand access, then interprets the database result as the group ID or a business failure. Returns Response, Error and idProductGroup; duplicate-name handling is not an idempotency guarantee.

```json
{"openapi":"3.0.3","info":{"title":"Atreemo API","version":"0.1.0"},"tags":[{"name":"Product","description":"Api Methods for Product"}],"servers":[{"url":"https://apim-hospitality-dev-uksouth.azure-api.net/atreemo-api","description":"Local DEV APIM import draft only; not a deployed endpoint announcement."}],"security":[{"AtreemoBearer":[]}],"components":{"securitySchemes":{"AtreemoBearer":{"type":"http","scheme":"bearer","description":"Atreemo access token obtained by the caller from the Atreemo instance `POST /token` endpoint (OAuth2 password grant) and sent as `Authorization: Bearer <token>`. See the Authorisation guide."}},"schemas":{"ProductGroup":{"type":"object","nullable":true,"properties":{"GroupID":{"type":"integer","format":"int32"},"BrandID":{"type":"integer","format":"int32","nullable":true},"GroupName":{"type":"string","nullable":true}},"description":"Source-backed JSON members, including inheritance and JSON naming/ignore attributes. No property is required solely because its CLR value type is non-nullable. Runtime and deployment alignment are unverified."},"OutputProductGroup":{"type":"object","nullable":true,"properties":{"Response":{"type":"boolean"},"Error":{"type":"string","nullable":true},"idProductGroup":{"type":"integer","format":"int32"}},"description":"Source-backed JSON members, including inheritance and JSON naming/ignore attributes. No property is required solely because its CLR value type is non-nullable. Runtime and deployment alignment are unverified."}}},"paths":{"/api/Product/PostProductGroup":{"post":{"operationId":"ProductPostProductGroup","summary":"PostProductGroup","tags":["Product"],"description":"Requests creation of a product group by name in the resolved brand. The controller checks the group name and brand access, then interprets the database result as the group ID or a business failure. Returns Response, Error and idProductGroup; duplicate-name handling is not an idempotency guarantee.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductGroup"}}}},"responses":{"200":{"description":"OK (sample status in the public collection).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OutputProductGroup"}}}}}}}}}
```

## PostProductSubGroup

> Requests creation of a named product subgroup under the supplied group and brand context. The action checks the input and brand, processes the database result, and returns Response, Error and idProductSubGroup. Confirm valid group identifiers and inspect business failure fields before treating the write as successful.

```json
{"openapi":"3.0.3","info":{"title":"Atreemo API","version":"0.1.0"},"tags":[{"name":"Product","description":"Api Methods for Product"}],"servers":[{"url":"https://apim-hospitality-dev-uksouth.azure-api.net/atreemo-api","description":"Local DEV APIM import draft only; not a deployed endpoint announcement."}],"security":[{"AtreemoBearer":[]}],"components":{"securitySchemes":{"AtreemoBearer":{"type":"http","scheme":"bearer","description":"Atreemo access token obtained by the caller from the Atreemo instance `POST /token` endpoint (OAuth2 password grant) and sent as `Authorization: Bearer <token>`. See the Authorisation guide."}},"schemas":{"ProductSubGroup":{"type":"object","nullable":true,"properties":{"SubGroupID":{"type":"integer","format":"int32"},"BrandID":{"type":"integer","format":"int32","nullable":true},"GroupID":{"type":"integer","format":"int32"},"SubGroupName":{"type":"string","nullable":true}},"description":"Source-backed JSON members, including inheritance and JSON naming/ignore attributes. No property is required solely because its CLR value type is non-nullable. Runtime and deployment alignment are unverified."},"OutputProductSubGroup":{"type":"object","nullable":true,"properties":{"Response":{"type":"boolean"},"Error":{"type":"string","nullable":true},"idProductSubGroup":{"type":"integer","format":"int32"}},"description":"Source-backed JSON members, including inheritance and JSON naming/ignore attributes. No property is required solely because its CLR value type is non-nullable. Runtime and deployment alignment are unverified."}}},"paths":{"/api/Product/PostProductSubGroup":{"post":{"operationId":"ProductPostProductSubGroup","summary":"PostProductSubGroup","tags":["Product"],"description":"Requests creation of a named product subgroup under the supplied group and brand context. The action checks the input and brand, processes the database result, and returns Response, Error and idProductSubGroup. Confirm valid group identifiers and inspect business failure fields before treating the write as successful.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductSubGroup"}}}},"responses":{"200":{"description":"OK (sample status in the public collection).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OutputProductSubGroup"}}}}}}}}}
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

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

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.hos.accessacloud.com/atreemo-api/api-reference/atreemo-api-reference/product.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

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.
