> 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-pro/sourcing-or-products.md).

# Sourcing | Products

## GET /v1/sourcing/products

> Retrieve a list of sourcing products

```json
{"openapi":"3.0.4","info":{"title":"Equipme Supplier API","version":"v1"},"tags":[{"name":"Sourcing | 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":["category","id","name","partNumber","self"],"type":"object","properties":{"source":{"type":"string","description":"A reference value to identify the source of the product. This is used to identify the product in an external system combined with the external id.","nullable":true},"description":{"type":"string","description":"A short description of the product","nullable":true},"category":{"minLength":1,"type":"string","description":"Name of the technical category of the product."},"manufacturer":{"type":"string","description":"The name of the company which produces the product.","nullable":true},"ean":{"type":"string","description":"The European Article Number of the product","nullable":true},"defaultSourcingOffer":{"$ref":"#/components/schemas/ProductOffer"},"defaultSalesOffer":{"$ref":"#/components/schemas/ProductOffer"},"isStockProduct":{"type":"boolean","description":"Defines whether the product is a stock product or not. If true, minimumStock can also be set. If null, the information will be ignored.","nullable":true},"minimumStock":{"maximum":1000,"minimum":0,"type":"integer","description":"Minimum number of articles stored of this product. If the stock falls below this amount, a new procurement order should be placed.\nRequires \"IsStockProduct\" to be set to true otherwise it will be ignored","format":"int32","nullable":true},"id":{"type":"integer","description":"The identifier of the product.","format":"int64"},"name":{"minLength":1,"type":"string","description":"The name of the product."},"partNumber":{"minLength":1,"type":"string","description":"The manufacturer part number of the product."},"externalId":{"type":"string","description":"The id of the product in an external application like an ERP. Can be used for synchronization correlation.","nullable":true},"self":{"$ref":"#/components/schemas/ResourceLink"}},"additionalProperties":false},"ProductOffer":{"required":["created","currency","id","price","self","supplier"],"type":"object","properties":{"supplier":{"$ref":"#/components/schemas/SupplierReference"},"price":{"maximum":7.922816251426434e+28,"minimum":0,"type":"number","description":"The price of the offer.","format":"double"},"stockQuantity":{"type":"integer","description":"The currently available stock quantity.","format":"int32","nullable":true},"currency":{"$ref":"#/components/schemas/Currency"},"created":{"type":"string","description":"The time when the offer got created.","format":"date-time"},"externalId":{"type":"string","description":"The id of the offer in an external application like an ERP. Can be used for synchronization correlation.","nullable":true},"id":{"type":"integer","description":"The identifier of the product offer.","format":"int64"},"scope":{"$ref":"#/components/schemas/ProductOfferScope"},"self":{"$ref":"#/components/schemas/ResourceLink"}},"additionalProperties":false},"SupplierReference":{"required":["id","self"],"type":"object","properties":{"id":{"type":"integer","description":"The identifier of the supplier.","format":"int64"},"name":{"type":"string","description":"The name of the supplier.","nullable":true},"self":{"$ref":"#/components/schemas/ResourceLink"}},"additionalProperties":false},"Currency":{"enum":["EUR"],"type":"string","description":"Supported currencies in ISO 4217 format"},"ProductOfferScope":{"enum":["sourcing","sales"],"type":"string"},"ErrorResponse":{"type":"object","properties":{"errorCode":{"type":"string","nullable":true},"errorDescription":{"type":"string","nullable":true},"data":{"nullable":true}},"additionalProperties":false}}},"paths":{"/v1/sourcing/products":{"get":{"tags":["Sourcing | Products"],"summary":"Retrieve a list of sourcing products","parameters":[{"name":"externalIds","in":"query","description":"Filter the products by one or more external ids.","schema":{"type":"array","items":{"type":"string"}}},{"name":"partNumbers","in":"query","description":"Filter the products by one or more part numbers.","schema":{"type":"array","items":{"type":"string"}}},{"name":"eans","in":"query","description":"Filter the products by one or more ean.","schema":{"type":"array","items":{"type":"string"}}},{"name":"sortBy","in":"query","description":"Sort the products by a given criterion","schema":{"$ref":"#/components/schemas/ProductSortParameter"}},{"name":"sortOrder","in":"query","description":"Sort the products in a given order (asc|desc)","schema":{"$ref":"#/components/schemas/SortOrder"}},{"name":"offset","in":"query","description":"Specifies the index of the first product to return","schema":{"type":"integer","format":"int32","default":0}},{"name":"limit","in":"query","description":"Specifies the maximum number of products to return","schema":{"type":"integer","format":"int32","default":100}}],"responses":{"200":{"description":"OK: List of sourcing 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 or expired access token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden: Resource access denied.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}}}}
```

## POST /v1/sourcing/products

> Create a new sourcing product

```json
{"openapi":"3.0.4","info":{"title":"Equipme Supplier API","version":"v1"},"tags":[{"name":"Sourcing | 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":{"ProductCreate":{"required":["category","name","sourcingOffer"],"type":"object","properties":{"externalId":{"maxLength":256,"minLength":0,"type":"string","description":"The id of the product in an external application like an ERP. Can be used for synchronization correlation.","nullable":true},"source":{"type":"string","description":"A reference value to identify the source of the product. This is used to identify the product in an external system combined with the external id.","nullable":true},"sourcingOffer":{"$ref":"#/components/schemas/ProductOfferCreate"},"name":{"maxLength":512,"minLength":0,"type":"string","description":"The name of the product"},"description":{"maxLength":2048,"minLength":0,"type":"string","description":"A short description of the product","nullable":true},"ean":{"maxLength":50,"minLength":0,"type":"string","description":"The European Article Number of the product","nullable":true},"partNumber":{"maxLength":256,"minLength":0,"type":"string","description":"The manufacturer part number of the product.","nullable":true},"manufacturer":{"maxLength":256,"minLength":0,"type":"string","description":"The name of the company which produces the product.","nullable":true},"category":{"minLength":1,"type":"string","description":"Name of the technical category of the product. For available categories see /categories route."},"salesOffer":{"$ref":"#/components/schemas/ProductOfferCreate"},"isStockProduct":{"type":"boolean","description":"Defines whether the product is a stock product or not. If true, minimumStock can also be set. If null, the information will be ignored.","nullable":true},"minimumStock":{"maximum":1000,"minimum":0,"type":"integer","description":"The minimum number of articles stored of this product. If the stock falls below this amount, a new procurement order should be placed.\nRequires \"IsStockProduct\" to be set to true otherwise it will be ignored","format":"int32","nullable":true}},"additionalProperties":false},"ProductOfferCreate":{"required":["currency","price","scope"],"type":"object","properties":{"scope":{"$ref":"#/components/schemas/ProductOfferScope"},"supplier":{"type":"string","description":"The supplier offering the product at given price.","nullable":true},"price":{"maximum":7.922816251426434e+28,"minimum":0,"type":"number","description":"The price of the offer.","format":"double"},"stockQuantity":{"maximum":7.922816251426434e+28,"minimum":0,"type":"integer","description":"The currently available stock quantity.","format":"int32","nullable":true},"currency":{"$ref":"#/components/schemas/Currency"},"externalId":{"maxLength":256,"minLength":0,"type":"string","description":"The id of the offer in an external application like an ERP. Can be used for synchronization correlation.","nullable":true}},"additionalProperties":false},"ProductOfferScope":{"enum":["sourcing","sales"],"type":"string"},"Currency":{"enum":["EUR"],"type":"string","description":"Supported currencies in ISO 4217 format"},"Product":{"required":["category","id","name","partNumber","self"],"type":"object","properties":{"source":{"type":"string","description":"A reference value to identify the source of the product. This is used to identify the product in an external system combined with the external id.","nullable":true},"description":{"type":"string","description":"A short description of the product","nullable":true},"category":{"minLength":1,"type":"string","description":"Name of the technical category of the product."},"manufacturer":{"type":"string","description":"The name of the company which produces the product.","nullable":true},"ean":{"type":"string","description":"The European Article Number of the product","nullable":true},"defaultSourcingOffer":{"$ref":"#/components/schemas/ProductOffer"},"defaultSalesOffer":{"$ref":"#/components/schemas/ProductOffer"},"isStockProduct":{"type":"boolean","description":"Defines whether the product is a stock product or not. If true, minimumStock can also be set. If null, the information will be ignored.","nullable":true},"minimumStock":{"maximum":1000,"minimum":0,"type":"integer","description":"Minimum number of articles stored of this product. If the stock falls below this amount, a new procurement order should be placed.\nRequires \"IsStockProduct\" to be set to true otherwise it will be ignored","format":"int32","nullable":true},"id":{"type":"integer","description":"The identifier of the product.","format":"int64"},"name":{"minLength":1,"type":"string","description":"The name of the product."},"partNumber":{"minLength":1,"type":"string","description":"The manufacturer part number of the product."},"externalId":{"type":"string","description":"The id of the product in an external application like an ERP. Can be used for synchronization correlation.","nullable":true},"self":{"$ref":"#/components/schemas/ResourceLink"}},"additionalProperties":false},"ProductOffer":{"required":["created","currency","id","price","self","supplier"],"type":"object","properties":{"supplier":{"$ref":"#/components/schemas/SupplierReference"},"price":{"maximum":7.922816251426434e+28,"minimum":0,"type":"number","description":"The price of the offer.","format":"double"},"stockQuantity":{"type":"integer","description":"The currently available stock quantity.","format":"int32","nullable":true},"currency":{"$ref":"#/components/schemas/Currency"},"created":{"type":"string","description":"The time when the offer got created.","format":"date-time"},"externalId":{"type":"string","description":"The id of the offer in an external application like an ERP. Can be used for synchronization correlation.","nullable":true},"id":{"type":"integer","description":"The identifier of the product offer.","format":"int64"},"scope":{"$ref":"#/components/schemas/ProductOfferScope"},"self":{"$ref":"#/components/schemas/ResourceLink"}},"additionalProperties":false},"SupplierReference":{"required":["id","self"],"type":"object","properties":{"id":{"type":"integer","description":"The identifier of the supplier.","format":"int64"},"name":{"type":"string","description":"The name of the supplier.","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},"ErrorResponse":{"type":"object","properties":{"errorCode":{"type":"string","nullable":true},"errorDescription":{"type":"string","nullable":true},"data":{"nullable":true}},"additionalProperties":false}}},"paths":{"/v1/sourcing/products":{"post":{"tags":["Sourcing | Products"],"summary":"Create a new sourcing product","parameters":[{"name":"allowDuplicatePartNumber","in":"query","description":"Optional: if false the part number of the given product will be checked for duplicates. There should be no product of the same manufacturer with the same part number, as they would likely be duplicates. Set the value to true to skip the duplicate check. Default: false.","schema":{"type":"boolean","default":false}}],"requestBody":{"description":"Information of the sourcing product to be created.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductCreate"}}}},"responses":{"201":{"description":"Created: The created sourcing product.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Product"}}}},"400":{"description":"Bad request: Body validation failed. 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.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict: The given part number is already related to another product from the same manufacturer. Set the parameter 'allowDuplicatePartNumber' to true to ignore the conflict.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}}}}
```

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

> Retrieve a sourcing product by its id

```json
{"openapi":"3.0.4","info":{"title":"Equipme Supplier API","version":"v1"},"tags":[{"name":"Sourcing | 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":["category","id","name","partNumber","self"],"type":"object","properties":{"source":{"type":"string","description":"A reference value to identify the source of the product. This is used to identify the product in an external system combined with the external id.","nullable":true},"description":{"type":"string","description":"A short description of the product","nullable":true},"category":{"minLength":1,"type":"string","description":"Name of the technical category of the product."},"manufacturer":{"type":"string","description":"The name of the company which produces the product.","nullable":true},"ean":{"type":"string","description":"The European Article Number of the product","nullable":true},"defaultSourcingOffer":{"$ref":"#/components/schemas/ProductOffer"},"defaultSalesOffer":{"$ref":"#/components/schemas/ProductOffer"},"isStockProduct":{"type":"boolean","description":"Defines whether the product is a stock product or not. If true, minimumStock can also be set. If null, the information will be ignored.","nullable":true},"minimumStock":{"maximum":1000,"minimum":0,"type":"integer","description":"Minimum number of articles stored of this product. If the stock falls below this amount, a new procurement order should be placed.\nRequires \"IsStockProduct\" to be set to true otherwise it will be ignored","format":"int32","nullable":true},"id":{"type":"integer","description":"The identifier of the product.","format":"int64"},"name":{"minLength":1,"type":"string","description":"The name of the product."},"partNumber":{"minLength":1,"type":"string","description":"The manufacturer part number of the product."},"externalId":{"type":"string","description":"The id of the product in an external application like an ERP. Can be used for synchronization correlation.","nullable":true},"self":{"$ref":"#/components/schemas/ResourceLink"}},"additionalProperties":false},"ProductOffer":{"required":["created","currency","id","price","self","supplier"],"type":"object","properties":{"supplier":{"$ref":"#/components/schemas/SupplierReference"},"price":{"maximum":7.922816251426434e+28,"minimum":0,"type":"number","description":"The price of the offer.","format":"double"},"stockQuantity":{"type":"integer","description":"The currently available stock quantity.","format":"int32","nullable":true},"currency":{"$ref":"#/components/schemas/Currency"},"created":{"type":"string","description":"The time when the offer got created.","format":"date-time"},"externalId":{"type":"string","description":"The id of the offer in an external application like an ERP. Can be used for synchronization correlation.","nullable":true},"id":{"type":"integer","description":"The identifier of the product offer.","format":"int64"},"scope":{"$ref":"#/components/schemas/ProductOfferScope"},"self":{"$ref":"#/components/schemas/ResourceLink"}},"additionalProperties":false},"SupplierReference":{"required":["id","self"],"type":"object","properties":{"id":{"type":"integer","description":"The identifier of the supplier.","format":"int64"},"name":{"type":"string","description":"The name of the supplier.","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},"Currency":{"enum":["EUR"],"type":"string","description":"Supported currencies in ISO 4217 format"},"ProductOfferScope":{"enum":["sourcing","sales"],"type":"string"},"ErrorResponse":{"type":"object","properties":{"errorCode":{"type":"string","nullable":true},"errorDescription":{"type":"string","nullable":true},"data":{"nullable":true}},"additionalProperties":false}}},"paths":{"/v1/sourcing/products/{productId}":{"get":{"tags":["Sourcing | Products"],"summary":"Retrieve a sourcing product by its id","parameters":[{"name":"productId","in":"path","description":"The identifier of the sourcing product.","required":true,"schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"OK: Sourcing 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 or expired access token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden: Resource access denied.","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"}}}}}}}}}
```

## PUT /v1/sourcing/products/{productId}

> Update a sourcing product

```json
{"openapi":"3.0.4","info":{"title":"Equipme Supplier API","version":"v1"},"tags":[{"name":"Sourcing | 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":{"ProductUpdate":{"required":["category","name"],"type":"object","properties":{"name":{"maxLength":512,"minLength":0,"type":"string","description":"The name of the product"},"description":{"maxLength":2048,"minLength":0,"type":"string","description":"A short description of the product","nullable":true},"ean":{"maxLength":50,"minLength":0,"type":"string","description":"The European Article Number of the product","nullable":true},"partNumber":{"maxLength":256,"minLength":0,"type":"string","description":"The manufacturer part number of the product.","nullable":true},"manufacturer":{"maxLength":256,"minLength":0,"type":"string","description":"The name of the company which produces the product.","nullable":true},"category":{"minLength":1,"type":"string","description":"Name of the technical category of the product. For available categories see /categories route."},"salesOffer":{"$ref":"#/components/schemas/ProductOfferCreate"},"isStockProduct":{"type":"boolean","description":"Defines whether the product is a stock product or not. If true, minimumStock can also be set. If null, the information will be ignored.","nullable":true},"minimumStock":{"maximum":1000,"minimum":0,"type":"integer","description":"The minimum number of articles stored of this product. If the stock falls below this amount, a new procurement order should be placed.\nRequires \"IsStockProduct\" to be set to true otherwise it will be ignored","format":"int32","nullable":true}},"additionalProperties":false},"ProductOfferCreate":{"required":["currency","price","scope"],"type":"object","properties":{"scope":{"$ref":"#/components/schemas/ProductOfferScope"},"supplier":{"type":"string","description":"The supplier offering the product at given price.","nullable":true},"price":{"maximum":7.922816251426434e+28,"minimum":0,"type":"number","description":"The price of the offer.","format":"double"},"stockQuantity":{"maximum":7.922816251426434e+28,"minimum":0,"type":"integer","description":"The currently available stock quantity.","format":"int32","nullable":true},"currency":{"$ref":"#/components/schemas/Currency"},"externalId":{"maxLength":256,"minLength":0,"type":"string","description":"The id of the offer in an external application like an ERP. Can be used for synchronization correlation.","nullable":true}},"additionalProperties":false},"ProductOfferScope":{"enum":["sourcing","sales"],"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/sourcing/products/{productId}":{"put":{"tags":["Sourcing | Products"],"summary":"Update a sourcing product","parameters":[{"name":"productId","in":"path","description":"The identifier of the sourcing product.","required":true,"schema":{"type":"integer","format":"int32"}},{"name":"allowDuplicatePartNumber","in":"query","description":"Optional: if false the part number of the given product will be checked for duplicates. There should be no product of the same manufacturer with the same part number, as they would likely be duplicates. Set the value to true to skip the duplicate check. Default: false.","schema":{"type":"boolean","default":false}}],"requestBody":{"description":"Information of the product to be updated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductUpdate"}}}},"responses":{"204":{"description":"NoContent: The product was successfully updated."},"400":{"description":"Bad request: Body validation failed. 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.","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"}}}},"409":{"description":"Conflict: The given part number is already related to another product from the same manufacturer. Set the parameter 'allowDuplicatePartNumber' to true to ignore the conflict.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}}}}
```

## DELETE /v1/sourcing/products/{productId}

> Delete a sourcing product

```json
{"openapi":"3.0.4","info":{"title":"Equipme Supplier API","version":"v1"},"tags":[{"name":"Sourcing | 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":{"ErrorResponse":{"type":"object","properties":{"errorCode":{"type":"string","nullable":true},"errorDescription":{"type":"string","nullable":true},"data":{"nullable":true}},"additionalProperties":false}}},"paths":{"/v1/sourcing/products/{productId}":{"delete":{"tags":["Sourcing | Products"],"summary":"Delete a sourcing product","parameters":[{"name":"productId","in":"path","description":"The identifier of the sourcing product for which the offer should be updated.","required":true,"schema":{"type":"integer","format":"int32"}},{"name":"force","in":"query","description":"Set to true if any conflicts that prevent the deletion should be ignored. (e.g. when the product is part of a bom and force is false, the product can not be deleted. If force is set to true the product will be removed from the bom and then deleted)","schema":{"type":"boolean","default":false}}],"responses":{"204":{"description":"NoContent: The product was successfully deleted."},"400":{"description":"BadRequest: Delete not supported.","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.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"NotFound: Given Product not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict: The given product has relations to other entities and can therefore not be deleted. If the conflicts should be ignored, set force to true.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}}}}
```

## GET /v1/sourcing/products/{productId}/offers

> Retrieve a list of offers of a specific sourcing product

```json
{"openapi":"3.0.4","info":{"title":"Equipme Supplier API","version":"v1"},"tags":[{"name":"Sourcing | 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":{"ProductOfferScope":{"enum":["sourcing","sales"],"type":"string"},"ProductOfferSortParameter":{"enum":["created"],"type":"string"},"SortOrder":{"enum":["asc","desc"],"type":"string","description":"Order in which the result of a list request is sorted."},"ProductOfferList":{"required":["items","self","total"],"type":"object","properties":{"previous":{"$ref":"#/components/schemas/ResourceLink"},"next":{"$ref":"#/components/schemas/ResourceLink"},"items":{"type":"array","items":{"$ref":"#/components/schemas/ProductOffer"},"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},"ProductOffer":{"required":["created","currency","id","price","self","supplier"],"type":"object","properties":{"supplier":{"$ref":"#/components/schemas/SupplierReference"},"price":{"maximum":7.922816251426434e+28,"minimum":0,"type":"number","description":"The price of the offer.","format":"double"},"stockQuantity":{"type":"integer","description":"The currently available stock quantity.","format":"int32","nullable":true},"currency":{"$ref":"#/components/schemas/Currency"},"created":{"type":"string","description":"The time when the offer got created.","format":"date-time"},"externalId":{"type":"string","description":"The id of the offer in an external application like an ERP. Can be used for synchronization correlation.","nullable":true},"id":{"type":"integer","description":"The identifier of the product offer.","format":"int64"},"scope":{"$ref":"#/components/schemas/ProductOfferScope"},"self":{"$ref":"#/components/schemas/ResourceLink"}},"additionalProperties":false},"SupplierReference":{"required":["id","self"],"type":"object","properties":{"id":{"type":"integer","description":"The identifier of the supplier.","format":"int64"},"name":{"type":"string","description":"The name of the supplier.","nullable":true},"self":{"$ref":"#/components/schemas/ResourceLink"}},"additionalProperties":false},"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/sourcing/products/{productId}/offers":{"get":{"tags":["Sourcing | Products"],"summary":"Retrieve a list of offers of a specific sourcing product","parameters":[{"name":"productId","in":"path","description":"The identifier of the sourcing product for which the offers are requested.","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"scope","in":"query","description":"Filter the offers according to their type. When null, all offers will be returned. Default: null","schema":{"$ref":"#/components/schemas/ProductOfferScope"}},{"name":"isCurrentOffer","in":"query","description":"","schema":{"type":"boolean","default":true}},{"name":"sortBy","in":"query","description":"Sort the items by a given criterion.","schema":{"$ref":"#/components/schemas/ProductOfferSortParameter"}},{"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: Response object with a list of offers and the total count to apply paging operations.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductOfferList"}}}},"400":{"description":"Bad request: See response message for details.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized: Invalid api key or expired access token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden: Resource access denied.","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"}}}}}}}}}
```

## POST /v1/sourcing/products/{productId}/offers

> Create a new offer for a sourcing product. This offer is automatically set as current offer.

```json
{"openapi":"3.0.4","info":{"title":"Equipme Supplier API","version":"v1"},"tags":[{"name":"Sourcing | 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":{"ProductOfferCreate":{"required":["currency","price","scope"],"type":"object","properties":{"scope":{"$ref":"#/components/schemas/ProductOfferScope"},"supplier":{"type":"string","description":"The supplier offering the product at given price.","nullable":true},"price":{"maximum":7.922816251426434e+28,"minimum":0,"type":"number","description":"The price of the offer.","format":"double"},"stockQuantity":{"maximum":7.922816251426434e+28,"minimum":0,"type":"integer","description":"The currently available stock quantity.","format":"int32","nullable":true},"currency":{"$ref":"#/components/schemas/Currency"},"externalId":{"maxLength":256,"minLength":0,"type":"string","description":"The id of the offer in an external application like an ERP. Can be used for synchronization correlation.","nullable":true}},"additionalProperties":false},"ProductOfferScope":{"enum":["sourcing","sales"],"type":"string"},"Currency":{"enum":["EUR"],"type":"string","description":"Supported currencies in ISO 4217 format"},"ProductOffer":{"required":["created","currency","id","price","self","supplier"],"type":"object","properties":{"supplier":{"$ref":"#/components/schemas/SupplierReference"},"price":{"maximum":7.922816251426434e+28,"minimum":0,"type":"number","description":"The price of the offer.","format":"double"},"stockQuantity":{"type":"integer","description":"The currently available stock quantity.","format":"int32","nullable":true},"currency":{"$ref":"#/components/schemas/Currency"},"created":{"type":"string","description":"The time when the offer got created.","format":"date-time"},"externalId":{"type":"string","description":"The id of the offer in an external application like an ERP. Can be used for synchronization correlation.","nullable":true},"id":{"type":"integer","description":"The identifier of the product offer.","format":"int64"},"scope":{"$ref":"#/components/schemas/ProductOfferScope"},"self":{"$ref":"#/components/schemas/ResourceLink"}},"additionalProperties":false},"SupplierReference":{"required":["id","self"],"type":"object","properties":{"id":{"type":"integer","description":"The identifier of the supplier.","format":"int64"},"name":{"type":"string","description":"The name of the supplier.","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},"ErrorResponse":{"type":"object","properties":{"errorCode":{"type":"string","nullable":true},"errorDescription":{"type":"string","nullable":true},"data":{"nullable":true}},"additionalProperties":false}}},"paths":{"/v1/sourcing/products/{productId}/offers":{"post":{"tags":["Sourcing | Products"],"summary":"Create a new offer for a sourcing product. This offer is automatically set as current offer.","parameters":[{"name":"productId","in":"path","description":"The identifier of the sourcing product for which the offer should be created.","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"description":"Information of the sourcing product offer to be created.","content":{"application/json-patch+json":{"schema":{"$ref":"#/components/schemas/ProductOfferCreate"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProductOfferCreate"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProductOfferCreate"}},"application/*+json":{"schema":{"$ref":"#/components/schemas/ProductOfferCreate"}}}},"responses":{"201":{"description":"Created: The created offer.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductOffer"}}}},"400":{"description":"Bad request: Body validation failed. 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.","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"}}}}}}}}}
```

## GET /v1/sourcing/products/{productId}/offers/{offerId}

> Retrieve a single offer of a specific sourcing product by its id

```json
{"openapi":"3.0.4","info":{"title":"Equipme Supplier API","version":"v1"},"tags":[{"name":"Sourcing | 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":{"ProductOffer":{"required":["created","currency","id","price","self","supplier"],"type":"object","properties":{"supplier":{"$ref":"#/components/schemas/SupplierReference"},"price":{"maximum":7.922816251426434e+28,"minimum":0,"type":"number","description":"The price of the offer.","format":"double"},"stockQuantity":{"type":"integer","description":"The currently available stock quantity.","format":"int32","nullable":true},"currency":{"$ref":"#/components/schemas/Currency"},"created":{"type":"string","description":"The time when the offer got created.","format":"date-time"},"externalId":{"type":"string","description":"The id of the offer in an external application like an ERP. Can be used for synchronization correlation.","nullable":true},"id":{"type":"integer","description":"The identifier of the product offer.","format":"int64"},"scope":{"$ref":"#/components/schemas/ProductOfferScope"},"self":{"$ref":"#/components/schemas/ResourceLink"}},"additionalProperties":false},"SupplierReference":{"required":["id","self"],"type":"object","properties":{"id":{"type":"integer","description":"The identifier of the supplier.","format":"int64"},"name":{"type":"string","description":"The name of the supplier.","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},"Currency":{"enum":["EUR"],"type":"string","description":"Supported currencies in ISO 4217 format"},"ProductOfferScope":{"enum":["sourcing","sales"],"type":"string"},"ErrorResponse":{"type":"object","properties":{"errorCode":{"type":"string","nullable":true},"errorDescription":{"type":"string","nullable":true},"data":{"nullable":true}},"additionalProperties":false}}},"paths":{"/v1/sourcing/products/{productId}/offers/{offerId}":{"get":{"tags":["Sourcing | Products"],"summary":"Retrieve a single offer of a specific sourcing product by its id","parameters":[{"name":"productId","in":"path","description":"The identifier of the sourcing product for which the offer is requested.","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"offerId","in":"path","description":"The identifier of the offer.","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"OK: The requested offer.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductOffer"}}}},"400":{"description":"Bad request: See response message for details.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized: Invalid api key or expired access token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden: Resource access denied.","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"}}}}}}}}}
```

## PUT /v1/sourcing/products/{productId}/offers/{offerId}

> Update a sourcing product offer

```json
{"openapi":"3.0.4","info":{"title":"Equipme Supplier API","version":"v1"},"tags":[{"name":"Sourcing | 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":{"ProductOfferUpdate":{"required":["currency","price"],"type":"object","properties":{"supplier":{"type":"string","description":"The supplier offering the product at given price.","nullable":true},"price":{"maximum":7.922816251426434e+28,"minimum":0,"type":"number","description":"The price of the offer.","format":"double"},"stockQuantity":{"maximum":7.922816251426434e+28,"minimum":0,"type":"integer","description":"The currently available stock quantity.","format":"int32","nullable":true},"currency":{"$ref":"#/components/schemas/Currency"},"externalId":{"maxLength":256,"minLength":0,"type":"string","description":"The id of the offer in an external application like an ERP. Can be used for synchronization correlation.","nullable":true}},"additionalProperties":false},"Currency":{"enum":["EUR"],"type":"string","description":"Supported currencies in ISO 4217 format"},"ProductOffer":{"required":["created","currency","id","price","self","supplier"],"type":"object","properties":{"supplier":{"$ref":"#/components/schemas/SupplierReference"},"price":{"maximum":7.922816251426434e+28,"minimum":0,"type":"number","description":"The price of the offer.","format":"double"},"stockQuantity":{"type":"integer","description":"The currently available stock quantity.","format":"int32","nullable":true},"currency":{"$ref":"#/components/schemas/Currency"},"created":{"type":"string","description":"The time when the offer got created.","format":"date-time"},"externalId":{"type":"string","description":"The id of the offer in an external application like an ERP. Can be used for synchronization correlation.","nullable":true},"id":{"type":"integer","description":"The identifier of the product offer.","format":"int64"},"scope":{"$ref":"#/components/schemas/ProductOfferScope"},"self":{"$ref":"#/components/schemas/ResourceLink"}},"additionalProperties":false},"SupplierReference":{"required":["id","self"],"type":"object","properties":{"id":{"type":"integer","description":"The identifier of the supplier.","format":"int64"},"name":{"type":"string","description":"The name of the supplier.","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},"ProductOfferScope":{"enum":["sourcing","sales"],"type":"string"},"ErrorResponse":{"type":"object","properties":{"errorCode":{"type":"string","nullable":true},"errorDescription":{"type":"string","nullable":true},"data":{"nullable":true}},"additionalProperties":false}}},"paths":{"/v1/sourcing/products/{productId}/offers/{offerId}":{"put":{"tags":["Sourcing | Products"],"summary":"Update a sourcing product offer","parameters":[{"name":"productId","in":"path","description":"The identifier of the sourcing product for which the offer should be updated.","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"offerId","in":"path","description":"The id of the offer which should be updated.","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"description":"Information to overwrite existing sourcing product offer","content":{"application/json-patch+json":{"schema":{"$ref":"#/components/schemas/ProductOfferUpdate"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProductOfferUpdate"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProductOfferUpdate"}},"application/*+json":{"schema":{"$ref":"#/components/schemas/ProductOfferUpdate"}}}},"responses":{"200":{"description":"OK: The updated offer.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductOffer"}}}},"400":{"description":"Bad request: Body validation failed. See response message for details.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized: Invalid api key or expired access token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden: Resource access denied.","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"}}}},"409":{"description":"Conflict: If the offer is already used in an order, the offer cannot be updated due to historization. To update the current offer anyway, use the create route.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}}}}
```

## GET /v1/sourcing/products/{productId}/services

> Retrieve a list of sales services in which the specific sourcing product is part of any bill of materials

```json
{"openapi":"3.0.4","info":{"title":"Equipme Supplier API","version":"v1"},"tags":[{"name":"Sourcing | 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":{"ServiceProductSortParameter":{"enum":["name","supplier","created"],"type":"string"},"SortOrder":{"enum":["asc","desc"],"type":"string","description":"Order in which the result of a list request is sorted."},"ProductOfferList":{"required":["items","self","total"],"type":"object","properties":{"previous":{"$ref":"#/components/schemas/ResourceLink"},"next":{"$ref":"#/components/schemas/ResourceLink"},"items":{"type":"array","items":{"$ref":"#/components/schemas/ProductOffer"},"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},"ProductOffer":{"required":["created","currency","id","price","self","supplier"],"type":"object","properties":{"supplier":{"$ref":"#/components/schemas/SupplierReference"},"price":{"maximum":7.922816251426434e+28,"minimum":0,"type":"number","description":"The price of the offer.","format":"double"},"stockQuantity":{"type":"integer","description":"The currently available stock quantity.","format":"int32","nullable":true},"currency":{"$ref":"#/components/schemas/Currency"},"created":{"type":"string","description":"The time when the offer got created.","format":"date-time"},"externalId":{"type":"string","description":"The id of the offer in an external application like an ERP. Can be used for synchronization correlation.","nullable":true},"id":{"type":"integer","description":"The identifier of the product offer.","format":"int64"},"scope":{"$ref":"#/components/schemas/ProductOfferScope"},"self":{"$ref":"#/components/schemas/ResourceLink"}},"additionalProperties":false},"SupplierReference":{"required":["id","self"],"type":"object","properties":{"id":{"type":"integer","description":"The identifier of the supplier.","format":"int64"},"name":{"type":"string","description":"The name of the supplier.","nullable":true},"self":{"$ref":"#/components/schemas/ResourceLink"}},"additionalProperties":false},"Currency":{"enum":["EUR"],"type":"string","description":"Supported currencies in ISO 4217 format"},"ProductOfferScope":{"enum":["sourcing","sales"],"type":"string"},"ErrorResponse":{"type":"object","properties":{"errorCode":{"type":"string","nullable":true},"errorDescription":{"type":"string","nullable":true},"data":{"nullable":true}},"additionalProperties":false}}},"paths":{"/v1/sourcing/products/{productId}/services":{"get":{"tags":["Sourcing | Products"],"summary":"Retrieve a list of sales services in which the specific sourcing product is part of any bill of materials","parameters":[{"name":"productId","in":"path","description":"The identifier of the sourcing product for which the services are requested.","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"sortBy","in":"query","description":"Sort the items by a given criterion.","schema":{"$ref":"#/components/schemas/ServiceProductSortParameter"}},{"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: Response object with a list of services and the total count to apply paging operations.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductOfferList"}}}},"400":{"description":"Bad request: See response message for details.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized: Invalid api key or expired access token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden: Resource access denied.","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-pro/sourcing-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.
