> For the complete documentation index, see [llms.txt](https://hub.equipme.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://hub.equipme.io/development/api-reference-app/procurement-or-products.md).

# Procurement | Products

## GET /v1/procurement/products

> Retrieve a list of products.

```json
{"openapi":"3.0.4","info":{"title":"Equipme Customer API","version":"v1"},"tags":[{"name":"Procurement | Products"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"apiKey","description":"Required for authorization in every request. You can request an API-Key for your tenant in the integrations section of the equipme App.","name":"X-API-KEY","in":"header"}},"schemas":{"ProductSortParameter":{"enum":["name"],"type":"string"},"SortOrder":{"enum":["asc","desc"],"type":"string","description":"Order in which the result of a list request is sorted."},"ProductList":{"required":["items","self","total"],"type":"object","properties":{"previous":{"$ref":"#/components/schemas/ResourceLink"},"next":{"$ref":"#/components/schemas/ResourceLink"},"items":{"type":"array","items":{"$ref":"#/components/schemas/Product"},"description":"The list of result items."},"total":{"type":"integer","description":"The total number of items.","format":"int32"},"self":{"$ref":"#/components/schemas/ResourceLink"}},"additionalProperties":false},"ResourceLink":{"required":["href"],"type":"object","properties":{"href":{"minLength":1,"type":"string","description":"The target resource URI."},"method":{"type":"string","description":"The HTTP method to use for the request.","nullable":true}},"additionalProperties":false},"Product":{"required":["id","name","self"],"type":"object","properties":{"description":{"type":"string","description":"A short description of the product.","nullable":true},"configurationType":{"$ref":"#/components/schemas/ServiceConfigurationType"},"previewImage":{"type":"string","description":"A link to the preview image of the product.","nullable":true},"attributes":{"type":"array","items":{"$ref":"#/components/schemas/ProductAttribute"},"description":"The attributes of the product.","nullable":true},"offers":{"type":"array","items":{"$ref":"#/components/schemas/ProductOffer"},"description":"The product offers.","nullable":true},"id":{"type":"integer","description":"The identifier of the product.","format":"int32"},"name":{"minLength":1,"type":"string","description":"The name of the product."},"self":{"$ref":"#/components/schemas/ResourceLink"}},"additionalProperties":false},"ServiceConfigurationType":{"enum":["simple","dynamic"],"type":"string","description":"Defines the configuration complexity of a service. Can not be changed after service creation."},"ProductAttribute":{"type":"object","properties":{"definition":{"$ref":"#/components/schemas/AttributeDefinitionReference"},"value":{"$ref":"#/components/schemas/AttributeValueReference"},"rank":{"type":"integer","description":"The display rank order of the attribute","format":"int32","nullable":true}},"additionalProperties":false},"AttributeDefinitionReference":{"required":["self"],"type":"object","properties":{"id":{"type":"integer","description":"The identifier of the attribute definition.","format":"int32"},"name":{"type":"string","description":"The name of the attribute.","nullable":true},"self":{"$ref":"#/components/schemas/ResourceLink"}},"additionalProperties":false},"AttributeValueReference":{"required":["self"],"type":"object","properties":{"id":{"type":"integer","description":"The identifier of the attribute value.","format":"int32"},"displayValue":{"type":"string","description":"The value for the attribute to be displayed.","nullable":true},"self":{"$ref":"#/components/schemas/ResourceLink"}},"additionalProperties":false},"ProductOffer":{"required":["self"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/OfferType"},"currency":{"$ref":"#/components/schemas/Currency"},"purchasePrice":{"type":"number","description":"The price charged only once after providing the item.","format":"double"},"recurringPrice":{"type":"number","description":"The price charged monthly after providing the item for the subscription period","format":"double"},"subscriptionPeriod":{"type":"integer","description":"The minimum subscription period (in month) for rental offers.","format":"int32"},"id":{"type":"integer","description":"The identifier of the offer.","format":"int32"},"self":{"$ref":"#/components/schemas/ResourceLink"}},"additionalProperties":false},"OfferType":{"enum":["rental","lease","purchase","subscription","leasing"],"type":"string"},"Currency":{"enum":["EUR"],"type":"string","description":"Supported currencies in ISO 4217 format"},"ErrorResponse":{"type":"object","properties":{"errorCode":{"type":"string","nullable":true},"errorDescription":{"type":"string","nullable":true},"data":{"nullable":true}},"additionalProperties":false}}},"paths":{"/v1/procurement/products":{"get":{"tags":["Procurement | Products"],"summary":"Retrieve a list of products.","parameters":[{"name":"sortBy","in":"query","description":"Sort the items by a given criterion.","schema":{"$ref":"#/components/schemas/ProductSortParameter"}},{"name":"sortOrder","in":"query","description":"Sort the items in a given order (asc|desc).","schema":{"$ref":"#/components/schemas/SortOrder"}},{"name":"offset","in":"query","description":"Specifies the index of the first item to return","schema":{"type":"integer","format":"int32","default":0}},{"name":"limit","in":"query","description":"Specifies the maximum number of items to return (min: 1; max: 1000)","schema":{"type":"integer","format":"int32","default":100}}],"responses":{"200":{"description":"OK: Returns a list of products.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductList"}}}},"400":{"description":"Bad request: See response message for details.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized: Invalid api key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden: Resource access denied or resource does not exist anymore.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}}}}
```

## GET /v1/procurement/products/{productId}

> Retrieve a single product by its id.

```json
{"openapi":"3.0.4","info":{"title":"Equipme Customer API","version":"v1"},"tags":[{"name":"Procurement | Products"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"apiKey","description":"Required for authorization in every request. You can request an API-Key for your tenant in the integrations section of the equipme App.","name":"X-API-KEY","in":"header"}},"schemas":{"Product":{"required":["id","name","self"],"type":"object","properties":{"description":{"type":"string","description":"A short description of the product.","nullable":true},"configurationType":{"$ref":"#/components/schemas/ServiceConfigurationType"},"previewImage":{"type":"string","description":"A link to the preview image of the product.","nullable":true},"attributes":{"type":"array","items":{"$ref":"#/components/schemas/ProductAttribute"},"description":"The attributes of the product.","nullable":true},"offers":{"type":"array","items":{"$ref":"#/components/schemas/ProductOffer"},"description":"The product offers.","nullable":true},"id":{"type":"integer","description":"The identifier of the product.","format":"int32"},"name":{"minLength":1,"type":"string","description":"The name of the product."},"self":{"$ref":"#/components/schemas/ResourceLink"}},"additionalProperties":false},"ServiceConfigurationType":{"enum":["simple","dynamic"],"type":"string","description":"Defines the configuration complexity of a service. Can not be changed after service creation."},"ProductAttribute":{"type":"object","properties":{"definition":{"$ref":"#/components/schemas/AttributeDefinitionReference"},"value":{"$ref":"#/components/schemas/AttributeValueReference"},"rank":{"type":"integer","description":"The display rank order of the attribute","format":"int32","nullable":true}},"additionalProperties":false},"AttributeDefinitionReference":{"required":["self"],"type":"object","properties":{"id":{"type":"integer","description":"The identifier of the attribute definition.","format":"int32"},"name":{"type":"string","description":"The name of the attribute.","nullable":true},"self":{"$ref":"#/components/schemas/ResourceLink"}},"additionalProperties":false},"ResourceLink":{"required":["href"],"type":"object","properties":{"href":{"minLength":1,"type":"string","description":"The target resource URI."},"method":{"type":"string","description":"The HTTP method to use for the request.","nullable":true}},"additionalProperties":false},"AttributeValueReference":{"required":["self"],"type":"object","properties":{"id":{"type":"integer","description":"The identifier of the attribute value.","format":"int32"},"displayValue":{"type":"string","description":"The value for the attribute to be displayed.","nullable":true},"self":{"$ref":"#/components/schemas/ResourceLink"}},"additionalProperties":false},"ProductOffer":{"required":["self"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/OfferType"},"currency":{"$ref":"#/components/schemas/Currency"},"purchasePrice":{"type":"number","description":"The price charged only once after providing the item.","format":"double"},"recurringPrice":{"type":"number","description":"The price charged monthly after providing the item for the subscription period","format":"double"},"subscriptionPeriod":{"type":"integer","description":"The minimum subscription period (in month) for rental offers.","format":"int32"},"id":{"type":"integer","description":"The identifier of the offer.","format":"int32"},"self":{"$ref":"#/components/schemas/ResourceLink"}},"additionalProperties":false},"OfferType":{"enum":["rental","lease","purchase","subscription","leasing"],"type":"string"},"Currency":{"enum":["EUR"],"type":"string","description":"Supported currencies in ISO 4217 format"},"ErrorResponse":{"type":"object","properties":{"errorCode":{"type":"string","nullable":true},"errorDescription":{"type":"string","nullable":true},"data":{"nullable":true}},"additionalProperties":false}}},"paths":{"/v1/procurement/products/{productId}":{"get":{"tags":["Procurement | Products"],"summary":"Retrieve a single product by its id.","parameters":[{"name":"productId","in":"path","description":"The identifier of the product.","required":true,"schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"OK: The requested product.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Product"}}}},"400":{"description":"Bad request: See response message for details.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized: Invalid api key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden: Resource access denied or resource does not exist anymore.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"NotFound: Requested resource could not be found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}}}}
```


---

# 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 dynamically by asking a question.

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

```
GET https://hub.equipme.io/development/api-reference-app/procurement-or-products.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.
