> 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/sales-or-services.md).

# Sales | Services

## GET /v1/sales/services

> List the sales services

```json
{"openapi":"3.0.4","info":{"title":"Equipme Supplier API","version":"v1"},"tags":[{"name":"Sales | Services"}],"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":{"ServiceConfigurationType":{"enum":["simple","dynamic"],"type":"string","description":"Defines the configuration complexity of a service. Can not be changed after service creation."},"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."},"ServiceProductList":{"required":["items","self","total"],"type":"object","properties":{"previous":{"$ref":"#/components/schemas/ResourceLink"},"next":{"$ref":"#/components/schemas/ResourceLink"},"items":{"type":"array","items":{"$ref":"#/components/schemas/ServiceProduct"},"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},"ServiceProduct":{"required":["id","name","self","supplier"],"type":"object","properties":{"supplier":{"$ref":"#/components/schemas/SupplierReference"},"shortDescription":{"type":"string","description":"A short description of the service without any formatting.","nullable":true},"detailDescription":{"type":"string","nullable":true},"scopeOfService":{"type":"string","nullable":true},"marketplaceCategory":{"type":"string","description":"Technical name of the marketplace category in which the service is\ndisplayed. Marketplace category can be managed by each supplier.","nullable":true},"marketplaceRank":{"type":"integer","description":"Defines in which order the service is displayed in its\nmarketplace category. The lower the value, the further forward the service\nis displayed.","format":"int32","nullable":true},"status":{"$ref":"#/components/schemas/ServiceProductStatus"},"availability":{"$ref":"#/components/schemas/ServiceProductAvailability"},"availabilityMessage":{"type":"string","description":"A message in the service details that is displayed to further define the availability of the product.","nullable":true},"contexts":{"type":"array","items":{"$ref":"#/components/schemas/SalesContext"},"description":"Context in which the service can be assigned.","nullable":true},"offers":{"type":"array","items":{"$ref":"#/components/schemas/ServiceOfferReference"},"description":"A list of all offers of the sales service.","nullable":true},"created":{"type":"string","description":"The date and time when the service was created. (ISO 8601 format)","format":"date-time"},"id":{"type":"integer","description":"The identifier of the service.","format":"int32"},"name":{"minLength":1,"type":"string","description":"The name of the service."},"category":{"type":"string","description":"The category of the service. Comes from the marketplace ProductDisplayGroup","nullable":true},"ean":{"type":"string","description":"Value to identify the service in other systems. E.g. when an other system is the source of this service. (Max. 50 characters)","nullable":true},"externalId":{"type":"string","description":"Value to identify the service in other systems. E.g. when an other system is the source of this service.","nullable":true},"supplierName":{"type":"string","description":"The supplier for this service product","nullable":true},"previewImageLink":{"type":"string","description":"Link to a small preview image for the product","nullable":true},"type":{"$ref":"#/components/schemas/ServiceProductType"},"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},"ServiceProductStatus":{"enum":["active","inactive","archived","removed"],"type":"string"},"ServiceProductAvailability":{"enum":["available","available_soon","not_available"],"type":"string","description":"Current availability status. Possible values: NULL, available, available_soon, not_available"},"SalesContext":{"required":["name"],"type":"object","properties":{"name":{"$ref":"#/components/schemas/ContextName"},"optional":{"type":"boolean","description":"If multiple contexts are defined, they can be set as optional. Otherwise, an assignment\nto the corresponding context entity is mandatory.","default":false},"changeAllowed":{"type":"boolean","description":"Defines whether the site or employee assignment of a service instance can be changed within the\nsubscription period. (Only if the \"location\" or \"employee\" context is configured for this service)","default":false}},"additionalProperties":false,"description":"A context defines which entity (e.g. employee or location) can be assigned to an instance of a product (e.g. during ordering)."},"ContextName":{"enum":["employee","location","client","software","cloud","customer","instance"],"type":"string","description":"Name of the assignment context."},"ServiceOfferReference":{"required":["currency","id","purchasePrice","recurringPrice","self","subscriptionPeriod","type"],"type":"object","properties":{"id":{"type":"integer","description":"The id to identify the offer in the system.","format":"int32"},"type":{"$ref":"#/components/schemas/OfferType"},"purchasePrice":{"maximum":1.7976931348623157e+308,"minimum":0,"type":"number","description":"The price charged only once after providing the item.","format":"double"},"recurringPrice":{"maximum":1.7976931348623157e+308,"minimum":0,"type":"number","description":"The price charged monthly after providing the item for the subscription period","format":"double"},"currency":{"minLength":1,"type":"string","description":"Currency in ISO 4217"},"subscriptionPeriod":{"maximum":2147483647,"minimum":0,"type":"integer","description":"The minimum subscription period (in months) for rental offers.","format":"int32"},"name":{"type":"string","description":"Name of the offer","nullable":true},"externalId":{"type":"string","description":"Value to identify the offer in other systems. E.g. when another system is the source of this offer.","nullable":true},"isDefault":{"type":"boolean","description":"Indicates if this offer is a default offer for the service."},"self":{"$ref":"#/components/schemas/ResourceLink"}},"additionalProperties":false},"OfferType":{"enum":["rental","lease","purchase","subscription","leasing"],"type":"string"},"ServiceProductType":{"enum":["service","addon","foundation_service"],"type":"string","description":"Services can take on different types that define their meaning and process flows within the system."},"ErrorResponse":{"type":"object","properties":{"errorCode":{"type":"string","nullable":true},"errorDescription":{"type":"string","nullable":true},"data":{"nullable":true}},"additionalProperties":false}}},"paths":{"/v1/sales/services":{"get":{"tags":["Sales | Services"],"summary":"List the sales services","parameters":[{"name":"names","in":"query","description":"Filter the services by one or more exact names.","schema":{"type":"array","items":{"type":"string"}}},{"name":"externalIds","in":"query","description":"Filter the services by one or more external ids.","schema":{"type":"array","items":{"type":"string"}}},{"name":"configurationTypes","in":"query","description":"Filter the services by one or more configuration types.","schema":{"type":"array","items":{"$ref":"#/components/schemas/ServiceConfigurationType"}}},{"name":"sortBy","in":"query","description":"Sort the services by a given criterion","schema":{"$ref":"#/components/schemas/ServiceProductSortParameter"}},{"name":"sortOrder","in":"query","description":"Sort the services in a given order (asc|desc)","schema":{"$ref":"#/components/schemas/SortOrder"}},{"name":"offset","in":"query","description":"Specifies the index of the first service to return","schema":{"type":"integer","format":"int32","default":0}},{"name":"limit","in":"query","description":"Specifies the maximum number of services to return","schema":{"type":"integer","format":"int32","default":100}}],"responses":{"200":{"description":"OK: A list of sales services.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceProductList"}}}},"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"}}}}}}}}}
```

## POST /v1/sales/services

> Create a new sales service

```json
{"openapi":"3.0.4","info":{"title":"Equipme Supplier API","version":"v1"},"tags":[{"name":"Sales | Services"}],"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":{"ServiceProductCreate":{"required":["marketplaceCategory","name","offer"],"type":"object","properties":{"configurationType":{"$ref":"#/components/schemas/ServiceConfigurationType"},"offer":{"$ref":"#/components/schemas/ServiceOfferCreate"},"bomItems":{"type":"array","items":{"$ref":"#/components/schemas/BomItemCreateModel"},"description":"The products which are items in the bill of materials (optional).","nullable":true},"customerIds":{"type":"array","items":{"type":"integer","format":"int32"},"description":"Customer IDs for which the service is available. If null, the service is available to all customers.","nullable":true},"previewImageLink":{"type":"string","description":"The link of the preview image for the service. Recommended size is 200x200px.","nullable":true},"images":{"type":"array","items":{"$ref":"#/components/schemas/ServiceProductImage"},"description":"A list of images of the products included in the service.","nullable":true},"name":{"maxLength":100,"minLength":0,"type":"string","description":"The name of the service. (Max. 100 characters)"},"shortDescription":{"maxLength":1500,"minLength":0,"type":"string","description":"A short description of the service without any formatting.","nullable":true},"detailDescription":{"type":"string","nullable":true},"scopeOfService":{"type":"string","nullable":true},"marketplaceCategory":{"maxLength":50,"minLength":0,"type":"string","description":"Technical name of the marketplace category in which the service is\ndisplayed. Marketplace category can be managed by each supplier."},"marketplaceRank":{"type":"integer","description":"Defines in which order the service is displayed in its\nmarketplace category. The lower the value, the further forward the service\nis displayed.","format":"int32","nullable":true},"status":{"$ref":"#/components/schemas/ServiceProductStatus"},"ean":{"maxLength":50,"minLength":0,"type":"string","description":"Value to identify the service in other systems. E.g. when an other system is the source of this service. (Max. 50 characters)","nullable":true},"externalId":{"maxLength":50,"minLength":0,"type":"string","description":"Value to identify the service in other systems. E.g. when an other system is the source of this service.","nullable":true},"contexts":{"type":"array","items":{"$ref":"#/components/schemas/SalesContext"},"description":"Context in which the service can be assigned.","nullable":true}},"additionalProperties":false},"ServiceConfigurationType":{"enum":["simple","dynamic"],"type":"string","description":"Defines the configuration complexity of a service. Can not be changed after service creation."},"ServiceOfferCreate":{"required":["currency","purchasePrice","recurringPrice","subscriptionPeriod","subscriptionPeriodRenewal","type"],"type":"object","properties":{"currency":{"$ref":"#/components/schemas/Currency"},"name":{"maxLength":50,"minLength":0,"type":"string","description":"Name of the offer","nullable":true},"type":{"$ref":"#/components/schemas/OfferType"},"customerIds":{"type":"array","items":{"type":"integer","format":"int32"},"description":"Customer IDs for which the service offer is available. If null, the service offer is available to all customers for which the service is available.","nullable":true},"syncPriceFromBom":{"type":"boolean","description":"Determines if the Prices are synced to the sales offers of the mapped products"},"purchasePrice":{"maximum":1.7976931348623157e+308,"minimum":0,"type":"number","description":"The price charged only once after providing the item.","format":"double"},"recurringPrice":{"maximum":1.7976931348623157e+308,"minimum":0,"type":"number","description":"The price charged monthly after providing the item for the subscription period","format":"double"},"subscriptionPeriod":{"maximum":2147483647,"minimum":0,"type":"integer","description":"The minimum subscription period (in month) for rental offers.","format":"int32"},"subscriptionPeriodRenewal":{"maximum":2147483647,"minimum":0,"type":"integer","description":"Number of months a subscription is renewed after its expiration time if it has not been terminated.","format":"int32"},"differentInvoiceIssuer":{"maxLength":100,"minLength":0,"type":"string","description":"Specifies the invoicing company's name, used when billing is outsourced. Enter the legal name of the company handling invoices, different from the service provider. \nApplicable for organizations that outsource billing but manage service provision. Leave blank if billing is handled on your own.","nullable":true},"externalId":{"maxLength":50,"minLength":0,"type":"string","description":"Value to identify the offer in other systems. E.g. when another system is the source of this offer.","nullable":true},"isDefault":{"type":"boolean","description":"Specifies if this offer is a default offer for the service.\nEvery service must have one default offer per offer type.","nullable":true}},"additionalProperties":false},"Currency":{"enum":["EUR"],"type":"string","description":"Supported currencies in ISO 4217 format"},"OfferType":{"enum":["rental","lease","purchase","subscription","leasing"],"type":"string"},"BomItemCreateModel":{"required":["productId","quantity"],"type":"object","properties":{"productId":{"type":"integer","description":"The id of the product for which an item in the bill of materials should be created.","format":"int64"},"quantity":{"maximum":20,"minimum":1,"type":"integer","description":"Quantity of the product in the bill of materials","format":"int32","default":1},"subscriptionPeriodCondition":{"maximum":2147483647,"minimum":0,"type":"integer","description":"If set to any value but null, this bom item will only be applied on orders of an offer with the matching subscription period.","format":"int32","nullable":true}},"additionalProperties":false},"ServiceProductImage":{"required":["large","medium","small"],"type":"object","properties":{"large":{"maxLength":2000,"minLength":0,"type":"string","description":"Link for the image in large size. Recommended size is min 1200px on the longest edge."},"medium":{"maxLength":2000,"minLength":0,"type":"string","description":"Link for the image in medium size. Recommended size is about 600px on the longest edge."},"small":{"maxLength":2000,"minLength":0,"type":"string","description":"Link for the image in small size. Recommended size is 200px on the longest edge."},"rank":{"maximum":2147483647,"minimum":0,"type":"integer","description":"The rank of the image. The rank is used to sort the images in the order they should be displayed.","format":"int32"}},"additionalProperties":false,"description":"Image object for a service product represented in several sizes for improved display."},"ServiceProductStatus":{"enum":["active","inactive","archived","removed"],"type":"string"},"SalesContext":{"required":["name"],"type":"object","properties":{"name":{"$ref":"#/components/schemas/ContextName"},"optional":{"type":"boolean","description":"If multiple contexts are defined, they can be set as optional. Otherwise, an assignment\nto the corresponding context entity is mandatory.","default":false},"changeAllowed":{"type":"boolean","description":"Defines whether the site or employee assignment of a service instance can be changed within the\nsubscription period. (Only if the \"location\" or \"employee\" context is configured for this service)","default":false}},"additionalProperties":false,"description":"A context defines which entity (e.g. employee or location) can be assigned to an instance of a product (e.g. during ordering)."},"ContextName":{"enum":["employee","location","client","software","cloud","customer","instance"],"type":"string","description":"Name of the assignment context."},"ServiceProduct":{"required":["id","name","self","supplier"],"type":"object","properties":{"supplier":{"$ref":"#/components/schemas/SupplierReference"},"shortDescription":{"type":"string","description":"A short description of the service without any formatting.","nullable":true},"detailDescription":{"type":"string","nullable":true},"scopeOfService":{"type":"string","nullable":true},"marketplaceCategory":{"type":"string","description":"Technical name of the marketplace category in which the service is\ndisplayed. Marketplace category can be managed by each supplier.","nullable":true},"marketplaceRank":{"type":"integer","description":"Defines in which order the service is displayed in its\nmarketplace category. The lower the value, the further forward the service\nis displayed.","format":"int32","nullable":true},"status":{"$ref":"#/components/schemas/ServiceProductStatus"},"availability":{"$ref":"#/components/schemas/ServiceProductAvailability"},"availabilityMessage":{"type":"string","description":"A message in the service details that is displayed to further define the availability of the product.","nullable":true},"contexts":{"type":"array","items":{"$ref":"#/components/schemas/SalesContext"},"description":"Context in which the service can be assigned.","nullable":true},"offers":{"type":"array","items":{"$ref":"#/components/schemas/ServiceOfferReference"},"description":"A list of all offers of the sales service.","nullable":true},"created":{"type":"string","description":"The date and time when the service was created. (ISO 8601 format)","format":"date-time"},"id":{"type":"integer","description":"The identifier of the service.","format":"int32"},"name":{"minLength":1,"type":"string","description":"The name of the service."},"category":{"type":"string","description":"The category of the service. Comes from the marketplace ProductDisplayGroup","nullable":true},"ean":{"type":"string","description":"Value to identify the service in other systems. E.g. when an other system is the source of this service. (Max. 50 characters)","nullable":true},"externalId":{"type":"string","description":"Value to identify the service in other systems. E.g. when an other system is the source of this service.","nullable":true},"supplierName":{"type":"string","description":"The supplier for this service product","nullable":true},"previewImageLink":{"type":"string","description":"Link to a small preview image for the product","nullable":true},"type":{"$ref":"#/components/schemas/ServiceProductType"},"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},"ServiceProductAvailability":{"enum":["available","available_soon","not_available"],"type":"string","description":"Current availability status. Possible values: NULL, available, available_soon, not_available"},"ServiceOfferReference":{"required":["currency","id","purchasePrice","recurringPrice","self","subscriptionPeriod","type"],"type":"object","properties":{"id":{"type":"integer","description":"The id to identify the offer in the system.","format":"int32"},"type":{"$ref":"#/components/schemas/OfferType"},"purchasePrice":{"maximum":1.7976931348623157e+308,"minimum":0,"type":"number","description":"The price charged only once after providing the item.","format":"double"},"recurringPrice":{"maximum":1.7976931348623157e+308,"minimum":0,"type":"number","description":"The price charged monthly after providing the item for the subscription period","format":"double"},"currency":{"minLength":1,"type":"string","description":"Currency in ISO 4217"},"subscriptionPeriod":{"maximum":2147483647,"minimum":0,"type":"integer","description":"The minimum subscription period (in months) for rental offers.","format":"int32"},"name":{"type":"string","description":"Name of the offer","nullable":true},"externalId":{"type":"string","description":"Value to identify the offer in other systems. E.g. when another system is the source of this offer.","nullable":true},"isDefault":{"type":"boolean","description":"Indicates if this offer is a default offer for the service."},"self":{"$ref":"#/components/schemas/ResourceLink"}},"additionalProperties":false},"ServiceProductType":{"enum":["service","addon","foundation_service"],"type":"string","description":"Services can take on different types that define their meaning and process flows within the system."},"ErrorResponse":{"type":"object","properties":{"errorCode":{"type":"string","nullable":true},"errorDescription":{"type":"string","nullable":true},"data":{"nullable":true}},"additionalProperties":false}}},"paths":{"/v1/sales/services":{"post":{"tags":["Sales | Services"],"summary":"Create a new sales service","requestBody":{"description":"Information of the sales service to be created.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceProductCreate"}}}},"responses":{"201":{"description":"Created: The created sales service.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceProduct"}}}},"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"}}}}}}}}}
```

## GET /v1/sales/services/{serviceId}

> Retrieve a single sales service by its id

```json
{"openapi":"3.0.4","info":{"title":"Equipme Supplier API","version":"v1"},"tags":[{"name":"Sales | Services"}],"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":{"ServiceProduct":{"required":["id","name","self","supplier"],"type":"object","properties":{"supplier":{"$ref":"#/components/schemas/SupplierReference"},"shortDescription":{"type":"string","description":"A short description of the service without any formatting.","nullable":true},"detailDescription":{"type":"string","nullable":true},"scopeOfService":{"type":"string","nullable":true},"marketplaceCategory":{"type":"string","description":"Technical name of the marketplace category in which the service is\ndisplayed. Marketplace category can be managed by each supplier.","nullable":true},"marketplaceRank":{"type":"integer","description":"Defines in which order the service is displayed in its\nmarketplace category. The lower the value, the further forward the service\nis displayed.","format":"int32","nullable":true},"status":{"$ref":"#/components/schemas/ServiceProductStatus"},"availability":{"$ref":"#/components/schemas/ServiceProductAvailability"},"availabilityMessage":{"type":"string","description":"A message in the service details that is displayed to further define the availability of the product.","nullable":true},"contexts":{"type":"array","items":{"$ref":"#/components/schemas/SalesContext"},"description":"Context in which the service can be assigned.","nullable":true},"offers":{"type":"array","items":{"$ref":"#/components/schemas/ServiceOfferReference"},"description":"A list of all offers of the sales service.","nullable":true},"created":{"type":"string","description":"The date and time when the service was created. (ISO 8601 format)","format":"date-time"},"id":{"type":"integer","description":"The identifier of the service.","format":"int32"},"name":{"minLength":1,"type":"string","description":"The name of the service."},"category":{"type":"string","description":"The category of the service. Comes from the marketplace ProductDisplayGroup","nullable":true},"ean":{"type":"string","description":"Value to identify the service in other systems. E.g. when an other system is the source of this service. (Max. 50 characters)","nullable":true},"externalId":{"type":"string","description":"Value to identify the service in other systems. E.g. when an other system is the source of this service.","nullable":true},"supplierName":{"type":"string","description":"The supplier for this service product","nullable":true},"previewImageLink":{"type":"string","description":"Link to a small preview image for the product","nullable":true},"type":{"$ref":"#/components/schemas/ServiceProductType"},"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},"ServiceProductStatus":{"enum":["active","inactive","archived","removed"],"type":"string"},"ServiceProductAvailability":{"enum":["available","available_soon","not_available"],"type":"string","description":"Current availability status. Possible values: NULL, available, available_soon, not_available"},"SalesContext":{"required":["name"],"type":"object","properties":{"name":{"$ref":"#/components/schemas/ContextName"},"optional":{"type":"boolean","description":"If multiple contexts are defined, they can be set as optional. Otherwise, an assignment\nto the corresponding context entity is mandatory.","default":false},"changeAllowed":{"type":"boolean","description":"Defines whether the site or employee assignment of a service instance can be changed within the\nsubscription period. (Only if the \"location\" or \"employee\" context is configured for this service)","default":false}},"additionalProperties":false,"description":"A context defines which entity (e.g. employee or location) can be assigned to an instance of a product (e.g. during ordering)."},"ContextName":{"enum":["employee","location","client","software","cloud","customer","instance"],"type":"string","description":"Name of the assignment context."},"ServiceOfferReference":{"required":["currency","id","purchasePrice","recurringPrice","self","subscriptionPeriod","type"],"type":"object","properties":{"id":{"type":"integer","description":"The id to identify the offer in the system.","format":"int32"},"type":{"$ref":"#/components/schemas/OfferType"},"purchasePrice":{"maximum":1.7976931348623157e+308,"minimum":0,"type":"number","description":"The price charged only once after providing the item.","format":"double"},"recurringPrice":{"maximum":1.7976931348623157e+308,"minimum":0,"type":"number","description":"The price charged monthly after providing the item for the subscription period","format":"double"},"currency":{"minLength":1,"type":"string","description":"Currency in ISO 4217"},"subscriptionPeriod":{"maximum":2147483647,"minimum":0,"type":"integer","description":"The minimum subscription period (in months) for rental offers.","format":"int32"},"name":{"type":"string","description":"Name of the offer","nullable":true},"externalId":{"type":"string","description":"Value to identify the offer in other systems. E.g. when another system is the source of this offer.","nullable":true},"isDefault":{"type":"boolean","description":"Indicates if this offer is a default offer for the service."},"self":{"$ref":"#/components/schemas/ResourceLink"}},"additionalProperties":false},"OfferType":{"enum":["rental","lease","purchase","subscription","leasing"],"type":"string"},"ServiceProductType":{"enum":["service","addon","foundation_service"],"type":"string","description":"Services can take on different types that define their meaning and process flows within the system."},"ErrorResponse":{"type":"object","properties":{"errorCode":{"type":"string","nullable":true},"errorDescription":{"type":"string","nullable":true},"data":{"nullable":true}},"additionalProperties":false}}},"paths":{"/v1/sales/services/{serviceId}":{"get":{"tags":["Sales | Services"],"summary":"Retrieve a single sales service by its id","parameters":[{"name":"serviceId","in":"path","description":"The identifier of the sales service.","required":true,"schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"OK: The requested sales service.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceProduct"}}}},"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"}}}}}}}}}
```

## PUT /v1/sales/services/{serviceId}

> Updates an existing sales service

```json
{"openapi":"3.0.4","info":{"title":"Equipme Supplier API","version":"v1"},"tags":[{"name":"Sales | Services"}],"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":{"ServiceProductUpdate":{"required":["marketplaceCategory","name"],"type":"object","properties":{"availability":{"$ref":"#/components/schemas/ServiceProductAvailability"},"availabilityMessage":{"maxLength":100,"minLength":0,"type":"string","description":"A message in the service details that is displayed to further define the availability of the service.","nullable":true},"name":{"maxLength":100,"minLength":0,"type":"string","description":"The name of the service. (Max. 100 characters)"},"shortDescription":{"maxLength":1500,"minLength":0,"type":"string","description":"A short description of the service without any formatting.","nullable":true},"detailDescription":{"type":"string","nullable":true},"scopeOfService":{"type":"string","nullable":true},"marketplaceCategory":{"maxLength":50,"minLength":0,"type":"string","description":"Technical name of the marketplace category in which the service is\ndisplayed. Marketplace category can be managed by each supplier."},"marketplaceRank":{"type":"integer","description":"Defines in which order the service is displayed in its\nmarketplace category. The lower the value, the further forward the service\nis displayed.","format":"int32","nullable":true},"status":{"$ref":"#/components/schemas/ServiceProductStatus"},"ean":{"maxLength":50,"minLength":0,"type":"string","description":"Value to identify the service in other systems. E.g. when an other system is the source of this service. (Max. 50 characters)","nullable":true},"externalId":{"maxLength":50,"minLength":0,"type":"string","description":"Value to identify the service in other systems. E.g. when an other system is the source of this service.","nullable":true},"contexts":{"type":"array","items":{"$ref":"#/components/schemas/SalesContext"},"description":"Context in which the service can be assigned.","nullable":true}},"additionalProperties":false},"ServiceProductAvailability":{"enum":["available","available_soon","not_available"],"type":"string","description":"Current availability status. Possible values: NULL, available, available_soon, not_available"},"ServiceProductStatus":{"enum":["active","inactive","archived","removed"],"type":"string"},"SalesContext":{"required":["name"],"type":"object","properties":{"name":{"$ref":"#/components/schemas/ContextName"},"optional":{"type":"boolean","description":"If multiple contexts are defined, they can be set as optional. Otherwise, an assignment\nto the corresponding context entity is mandatory.","default":false},"changeAllowed":{"type":"boolean","description":"Defines whether the site or employee assignment of a service instance can be changed within the\nsubscription period. (Only if the \"location\" or \"employee\" context is configured for this service)","default":false}},"additionalProperties":false,"description":"A context defines which entity (e.g. employee or location) can be assigned to an instance of a product (e.g. during ordering)."},"ContextName":{"enum":["employee","location","client","software","cloud","customer","instance"],"type":"string","description":"Name of the assignment context."},"ServiceProduct":{"required":["id","name","self","supplier"],"type":"object","properties":{"supplier":{"$ref":"#/components/schemas/SupplierReference"},"shortDescription":{"type":"string","description":"A short description of the service without any formatting.","nullable":true},"detailDescription":{"type":"string","nullable":true},"scopeOfService":{"type":"string","nullable":true},"marketplaceCategory":{"type":"string","description":"Technical name of the marketplace category in which the service is\ndisplayed. Marketplace category can be managed by each supplier.","nullable":true},"marketplaceRank":{"type":"integer","description":"Defines in which order the service is displayed in its\nmarketplace category. The lower the value, the further forward the service\nis displayed.","format":"int32","nullable":true},"status":{"$ref":"#/components/schemas/ServiceProductStatus"},"availability":{"$ref":"#/components/schemas/ServiceProductAvailability"},"availabilityMessage":{"type":"string","description":"A message in the service details that is displayed to further define the availability of the product.","nullable":true},"contexts":{"type":"array","items":{"$ref":"#/components/schemas/SalesContext"},"description":"Context in which the service can be assigned.","nullable":true},"offers":{"type":"array","items":{"$ref":"#/components/schemas/ServiceOfferReference"},"description":"A list of all offers of the sales service.","nullable":true},"created":{"type":"string","description":"The date and time when the service was created. (ISO 8601 format)","format":"date-time"},"id":{"type":"integer","description":"The identifier of the service.","format":"int32"},"name":{"minLength":1,"type":"string","description":"The name of the service."},"category":{"type":"string","description":"The category of the service. Comes from the marketplace ProductDisplayGroup","nullable":true},"ean":{"type":"string","description":"Value to identify the service in other systems. E.g. when an other system is the source of this service. (Max. 50 characters)","nullable":true},"externalId":{"type":"string","description":"Value to identify the service in other systems. E.g. when an other system is the source of this service.","nullable":true},"supplierName":{"type":"string","description":"The supplier for this service product","nullable":true},"previewImageLink":{"type":"string","description":"Link to a small preview image for the product","nullable":true},"type":{"$ref":"#/components/schemas/ServiceProductType"},"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},"ServiceOfferReference":{"required":["currency","id","purchasePrice","recurringPrice","self","subscriptionPeriod","type"],"type":"object","properties":{"id":{"type":"integer","description":"The id to identify the offer in the system.","format":"int32"},"type":{"$ref":"#/components/schemas/OfferType"},"purchasePrice":{"maximum":1.7976931348623157e+308,"minimum":0,"type":"number","description":"The price charged only once after providing the item.","format":"double"},"recurringPrice":{"maximum":1.7976931348623157e+308,"minimum":0,"type":"number","description":"The price charged monthly after providing the item for the subscription period","format":"double"},"currency":{"minLength":1,"type":"string","description":"Currency in ISO 4217"},"subscriptionPeriod":{"maximum":2147483647,"minimum":0,"type":"integer","description":"The minimum subscription period (in months) for rental offers.","format":"int32"},"name":{"type":"string","description":"Name of the offer","nullable":true},"externalId":{"type":"string","description":"Value to identify the offer in other systems. E.g. when another system is the source of this offer.","nullable":true},"isDefault":{"type":"boolean","description":"Indicates if this offer is a default offer for the service."},"self":{"$ref":"#/components/schemas/ResourceLink"}},"additionalProperties":false},"OfferType":{"enum":["rental","lease","purchase","subscription","leasing"],"type":"string"},"ServiceProductType":{"enum":["service","addon","foundation_service"],"type":"string","description":"Services can take on different types that define their meaning and process flows within the system."},"ErrorResponse":{"type":"object","properties":{"errorCode":{"type":"string","nullable":true},"errorDescription":{"type":"string","nullable":true},"data":{"nullable":true}},"additionalProperties":false}}},"paths":{"/v1/sales/services/{serviceId}":{"put":{"tags":["Sales | Services"],"summary":"Updates an existing sales service","parameters":[{"name":"serviceId","in":"path","description":"The identifier of the sales service.","required":true,"schema":{"type":"integer","format":"int32"}}],"requestBody":{"description":"Information of the sales service to be updated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceProductUpdate"}}}},"responses":{"200":{"description":"OK: Returns the updated sales service.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceProduct"}}}},"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 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"}}}}}}}}}
```

## DELETE /v1/sales/services/{serviceId}

> Deletes an existing sales service

```json
{"openapi":"3.0.4","info":{"title":"Equipme Supplier API","version":"v1"},"tags":[{"name":"Sales | Services"}],"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/sales/services/{serviceId}":{"delete":{"tags":["Sales | Services"],"summary":"Deletes an existing sales service","parameters":[{"name":"serviceId","in":"path","description":"The identifier of the sales service to be deleted","required":true,"schema":{"type":"integer","format":"int32"}}],"responses":{"204":{"description":"NoContent: Delete successful."},"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 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"}}}}}}}}}
```

## Partially updates an existing sales service

> Please provide a valid JSON Patch document with the allowed fields to update. See example below for further details.

```json
{"openapi":"3.0.4","info":{"title":"Equipme Supplier API","version":"v1"},"tags":[{"name":"Sales | Services"}],"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":{"Operation":{"type":"object","properties":{"value":{"nullable":true},"path":{"type":"string","nullable":true},"op":{"type":"string","nullable":true},"from":{"type":"string","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/sales/services/{serviceId}":{"patch":{"tags":["Sales | Services"],"summary":"Partially updates an existing sales service","description":"Please provide a valid JSON Patch document with the allowed fields to update. See example below for further details.","parameters":[{"name":"serviceId","in":"path","description":"The identifier of the sales service.","required":true,"schema":{"type":"integer","format":"int32"}}],"requestBody":{"description":"Information of the sales service to be updated.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Operation"}}}}},"responses":{"200":{"description":"OK"},"204":{"description":"NoContent: Service successfully released."},"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 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"}}}}}}}}}
```

## GET /v1/sales/services/{serviceId}/attributes

> Get all attributes for a specific service product

```json
{"openapi":"3.0.4","info":{"title":"Equipme Supplier API","version":"v1"},"tags":[{"name":"Sales | Services"}],"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":{"ServiceProductAttribute":{"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},"ErrorResponse":{"type":"object","properties":{"errorCode":{"type":"string","nullable":true},"errorDescription":{"type":"string","nullable":true},"data":{"nullable":true}},"additionalProperties":false}}},"paths":{"/v1/sales/services/{serviceId}/attributes":{"get":{"tags":["Sales | Services"],"summary":"Get all attributes for a specific service product","parameters":[{"name":"serviceId","in":"path","description":"Service to retrieve attributes for","required":true,"schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"Ok"},"201":{"description":"Created","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ServiceProductAttribute"}}}}},"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."}}}}}}
```

## Add, Remove or partially update attributes for a specific service product

> Attribute definitions and their possible values can be managed with the endpoints defined in \`\`\`System | Attribute Definitions\`\`\`\
> \
> Please provide a valid JSON Patch document with the allowed fields to update. See example below for further details.

````json
{"openapi":"3.0.4","info":{"title":"Equipme Supplier API","version":"v1"},"tags":[{"name":"Sales | Services"}],"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":{"Operation":{"type":"object","properties":{"value":{"nullable":true},"path":{"type":"string","nullable":true},"op":{"type":"string","nullable":true},"from":{"type":"string","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/sales/services/{serviceId}/attributes":{"patch":{"tags":["Sales | Services"],"summary":"Add, Remove or partially update attributes for a specific service product","description":"Attribute definitions and their possible values can be managed with the endpoints defined in ```System | Attribute Definitions```\n\nPlease provide a valid JSON Patch document with the allowed fields to update. See example below for further details.","parameters":[{"name":"serviceId","in":"path","description":"The identifier of the service.","required":true,"schema":{"type":"integer","format":"int32"}}],"requestBody":{"description":"Information of the attributes to be updated.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Operation"}}}}},"responses":{"204":{"description":"NoContent: Update successful."},"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/sales/services/{serviceId}/offers

> Retrieve a list of all offers of a sales service

```json
{"openapi":"3.0.4","info":{"title":"Equipme Supplier API","version":"v1"},"tags":[{"name":"Sales | Services"}],"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":{"ServiceOfferSortParameter":{"enum":["created"],"type":"string"},"SortOrder":{"enum":["asc","desc"],"type":"string","description":"Order in which the result of a list request is sorted."},"ServiceOfferList":{"required":["items","self","total"],"type":"object","properties":{"previous":{"$ref":"#/components/schemas/ResourceLink"},"next":{"$ref":"#/components/schemas/ResourceLink"},"items":{"type":"array","items":{"$ref":"#/components/schemas/ServiceOffer"},"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},"ServiceOffer":{"required":["created","currency","id","purchasePrice","recurringPrice","self","subscriptionPeriod","subscriptionPeriodRenewal","type"],"type":"object","properties":{"created":{"type":"string","description":"UTC date of offer creation","format":"date-time"},"subscriptionPeriodRenewal":{"maximum":2147483647,"minimum":0,"type":"integer","description":"Number of months a subscription is renewed after its expiration time if it has not been terminated.","format":"int32"},"differentInvoiceIssuer":{"maxLength":100,"minLength":0,"type":"string","description":"Specifies the invoicing company's name, used when billing is outsourced. Enter the legal name of the company handling invoices, different from the service provider. \nApplicable for organizations that outsource billing but manage service provision. Leave blank if billing is handled on your own.","nullable":true},"id":{"type":"integer","description":"The id to identify the offer in the system.","format":"int32"},"type":{"$ref":"#/components/schemas/OfferType"},"purchasePrice":{"maximum":1.7976931348623157e+308,"minimum":0,"type":"number","description":"The price charged only once after providing the item.","format":"double"},"recurringPrice":{"maximum":1.7976931348623157e+308,"minimum":0,"type":"number","description":"The price charged monthly after providing the item for the subscription period","format":"double"},"currency":{"minLength":1,"type":"string","description":"Currency in ISO 4217"},"subscriptionPeriod":{"maximum":2147483647,"minimum":0,"type":"integer","description":"The minimum subscription period (in months) for rental offers.","format":"int32"},"name":{"type":"string","description":"Name of the offer","nullable":true},"externalId":{"type":"string","description":"Value to identify the offer in other systems. E.g. when another system is the source of this offer.","nullable":true},"isDefault":{"type":"boolean","description":"Indicates if this offer is a default offer for the service."},"self":{"$ref":"#/components/schemas/ResourceLink"}},"additionalProperties":false},"OfferType":{"enum":["rental","lease","purchase","subscription","leasing"],"type":"string"},"ErrorResponse":{"type":"object","properties":{"errorCode":{"type":"string","nullable":true},"errorDescription":{"type":"string","nullable":true},"data":{"nullable":true}},"additionalProperties":false}}},"paths":{"/v1/sales/services/{serviceId}/offers":{"get":{"tags":["Sales | Services"],"summary":"Retrieve a list of all offers of a sales service","parameters":[{"name":"serviceId","in":"path","description":"The identifier of the sales service for which the offers are requested.","required":true,"schema":{"type":"integer","format":"int32"}},{"name":"sortBy","in":"query","description":"Sort the offers by a given criterion","schema":{"$ref":"#/components/schemas/ServiceOfferSortParameter"}},{"name":"sortOrder","in":"query","description":"Sort the offers in a given order (asc|desc)","schema":{"$ref":"#/components/schemas/SortOrder"}},{"name":"offset","in":"query","description":"Specifies the index of the first offer to return","schema":{"type":"integer","format":"int32","default":0}},{"name":"limit","in":"query","description":"Specifies the maximum number of offers to return","schema":{"type":"integer","format":"int32","default":100}}],"responses":{"200":{"description":"OK: List of sales service offers.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceOfferList"}}}},"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"}}}}}}}}}
```

## POST /v1/sales/services/{serviceId}/offers

> Create a new sales service offer

```json
{"openapi":"3.0.4","info":{"title":"Equipme Supplier API","version":"v1"},"tags":[{"name":"Sales | Services"}],"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":{"ServiceOfferCreate":{"required":["currency","purchasePrice","recurringPrice","subscriptionPeriod","subscriptionPeriodRenewal","type"],"type":"object","properties":{"currency":{"$ref":"#/components/schemas/Currency"},"name":{"maxLength":50,"minLength":0,"type":"string","description":"Name of the offer","nullable":true},"type":{"$ref":"#/components/schemas/OfferType"},"customerIds":{"type":"array","items":{"type":"integer","format":"int32"},"description":"Customer IDs for which the service offer is available. If null, the service offer is available to all customers for which the service is available.","nullable":true},"syncPriceFromBom":{"type":"boolean","description":"Determines if the Prices are synced to the sales offers of the mapped products"},"purchasePrice":{"maximum":1.7976931348623157e+308,"minimum":0,"type":"number","description":"The price charged only once after providing the item.","format":"double"},"recurringPrice":{"maximum":1.7976931348623157e+308,"minimum":0,"type":"number","description":"The price charged monthly after providing the item for the subscription period","format":"double"},"subscriptionPeriod":{"maximum":2147483647,"minimum":0,"type":"integer","description":"The minimum subscription period (in month) for rental offers.","format":"int32"},"subscriptionPeriodRenewal":{"maximum":2147483647,"minimum":0,"type":"integer","description":"Number of months a subscription is renewed after its expiration time if it has not been terminated.","format":"int32"},"differentInvoiceIssuer":{"maxLength":100,"minLength":0,"type":"string","description":"Specifies the invoicing company's name, used when billing is outsourced. Enter the legal name of the company handling invoices, different from the service provider. \nApplicable for organizations that outsource billing but manage service provision. Leave blank if billing is handled on your own.","nullable":true},"externalId":{"maxLength":50,"minLength":0,"type":"string","description":"Value to identify the offer in other systems. E.g. when another system is the source of this offer.","nullable":true},"isDefault":{"type":"boolean","description":"Specifies if this offer is a default offer for the service.\nEvery service must have one default offer per offer type.","nullable":true}},"additionalProperties":false},"Currency":{"enum":["EUR"],"type":"string","description":"Supported currencies in ISO 4217 format"},"OfferType":{"enum":["rental","lease","purchase","subscription","leasing"],"type":"string"},"ServiceOffer":{"required":["created","currency","id","purchasePrice","recurringPrice","self","subscriptionPeriod","subscriptionPeriodRenewal","type"],"type":"object","properties":{"created":{"type":"string","description":"UTC date of offer creation","format":"date-time"},"subscriptionPeriodRenewal":{"maximum":2147483647,"minimum":0,"type":"integer","description":"Number of months a subscription is renewed after its expiration time if it has not been terminated.","format":"int32"},"differentInvoiceIssuer":{"maxLength":100,"minLength":0,"type":"string","description":"Specifies the invoicing company's name, used when billing is outsourced. Enter the legal name of the company handling invoices, different from the service provider. \nApplicable for organizations that outsource billing but manage service provision. Leave blank if billing is handled on your own.","nullable":true},"id":{"type":"integer","description":"The id to identify the offer in the system.","format":"int32"},"type":{"$ref":"#/components/schemas/OfferType"},"purchasePrice":{"maximum":1.7976931348623157e+308,"minimum":0,"type":"number","description":"The price charged only once after providing the item.","format":"double"},"recurringPrice":{"maximum":1.7976931348623157e+308,"minimum":0,"type":"number","description":"The price charged monthly after providing the item for the subscription period","format":"double"},"currency":{"minLength":1,"type":"string","description":"Currency in ISO 4217"},"subscriptionPeriod":{"maximum":2147483647,"minimum":0,"type":"integer","description":"The minimum subscription period (in months) for rental offers.","format":"int32"},"name":{"type":"string","description":"Name of the offer","nullable":true},"externalId":{"type":"string","description":"Value to identify the offer in other systems. E.g. when another system is the source of this offer.","nullable":true},"isDefault":{"type":"boolean","description":"Indicates if this offer is a default offer for the service."},"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/sales/services/{serviceId}/offers":{"post":{"tags":["Sales | Services"],"summary":"Create a new sales service offer","parameters":[{"name":"serviceId","in":"path","description":"The identifier of the sales service for which the offer should be created.","required":true,"schema":{"type":"integer","format":"int32"}}],"requestBody":{"description":"Information of the sales service offer to be created.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceOfferCreate"}}}},"responses":{"201":{"description":"Created: The created sales service offer.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceOffer"}}}},"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/sales/services/{serviceId}/offers/{offerId}

> Retrieve a single sales service offer by its id

```json
{"openapi":"3.0.4","info":{"title":"Equipme Supplier API","version":"v1"},"tags":[{"name":"Sales | Services"}],"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":{"ServiceOffer":{"required":["created","currency","id","purchasePrice","recurringPrice","self","subscriptionPeriod","subscriptionPeriodRenewal","type"],"type":"object","properties":{"created":{"type":"string","description":"UTC date of offer creation","format":"date-time"},"subscriptionPeriodRenewal":{"maximum":2147483647,"minimum":0,"type":"integer","description":"Number of months a subscription is renewed after its expiration time if it has not been terminated.","format":"int32"},"differentInvoiceIssuer":{"maxLength":100,"minLength":0,"type":"string","description":"Specifies the invoicing company's name, used when billing is outsourced. Enter the legal name of the company handling invoices, different from the service provider. \nApplicable for organizations that outsource billing but manage service provision. Leave blank if billing is handled on your own.","nullable":true},"id":{"type":"integer","description":"The id to identify the offer in the system.","format":"int32"},"type":{"$ref":"#/components/schemas/OfferType"},"purchasePrice":{"maximum":1.7976931348623157e+308,"minimum":0,"type":"number","description":"The price charged only once after providing the item.","format":"double"},"recurringPrice":{"maximum":1.7976931348623157e+308,"minimum":0,"type":"number","description":"The price charged monthly after providing the item for the subscription period","format":"double"},"currency":{"minLength":1,"type":"string","description":"Currency in ISO 4217"},"subscriptionPeriod":{"maximum":2147483647,"minimum":0,"type":"integer","description":"The minimum subscription period (in months) for rental offers.","format":"int32"},"name":{"type":"string","description":"Name of the offer","nullable":true},"externalId":{"type":"string","description":"Value to identify the offer in other systems. E.g. when another system is the source of this offer.","nullable":true},"isDefault":{"type":"boolean","description":"Indicates if this offer is a default offer for the service."},"self":{"$ref":"#/components/schemas/ResourceLink"}},"additionalProperties":false},"OfferType":{"enum":["rental","lease","purchase","subscription","leasing"],"type":"string"},"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/sales/services/{serviceId}/offers/{offerId}":{"get":{"tags":["Sales | Services"],"summary":"Retrieve a single sales service offer by its id","parameters":[{"name":"serviceId","in":"path","description":"The identifier of the sales service for which the offer is requested.","required":true,"schema":{"type":"integer","format":"int32"}},{"name":"offerId","in":"path","description":"The identifier of the sales service offer.","required":true,"schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"OK: The requested sales service offer.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceOffer"}}}},"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"}}}}}}}}}
```

## PUT /v1/sales/services/{serviceId}/offers/{offerId}

> Updates an existing sales service offer

```json
{"openapi":"3.0.4","info":{"title":"Equipme Supplier API","version":"v1"},"tags":[{"name":"Sales | Services"}],"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":{"ServiceOfferUpdate":{"required":["purchasePrice","recurringPrice","subscriptionPeriod","subscriptionPeriodRenewal"],"type":"object","properties":{"syncPriceFromBom":{"type":"boolean","description":"Determines if the Prices are synced to the sales offers of the mapped products"},"purchasePrice":{"maximum":1.7976931348623157e+308,"minimum":0,"type":"number","description":"The price charged only once after providing the item.","format":"double"},"recurringPrice":{"maximum":1.7976931348623157e+308,"minimum":0,"type":"number","description":"The price charged monthly after providing the item for the subscription period","format":"double"},"subscriptionPeriod":{"maximum":2147483647,"minimum":0,"type":"integer","description":"The minimum subscription period (in month) for rental offers.","format":"int32"},"subscriptionPeriodRenewal":{"maximum":2147483647,"minimum":0,"type":"integer","description":"Number of months a subscription is renewed after its expiration time if it has not been terminated.","format":"int32"},"differentInvoiceIssuer":{"maxLength":100,"minLength":0,"type":"string","description":"Specifies the invoicing company's name, used when billing is outsourced. Enter the legal name of the company handling invoices, different from the service provider. \nApplicable for organizations that outsource billing but manage service provision. Leave blank if billing is handled on your own.","nullable":true},"externalId":{"maxLength":50,"minLength":0,"type":"string","description":"Value to identify the offer in other systems. E.g. when another system is the source of this offer.","nullable":true},"isDefault":{"type":"boolean","description":"Specifies if this offer is a default offer for the service.\nEvery service must have one default offer per offer type.","nullable":true}},"additionalProperties":false},"ServiceOffer":{"required":["created","currency","id","purchasePrice","recurringPrice","self","subscriptionPeriod","subscriptionPeriodRenewal","type"],"type":"object","properties":{"created":{"type":"string","description":"UTC date of offer creation","format":"date-time"},"subscriptionPeriodRenewal":{"maximum":2147483647,"minimum":0,"type":"integer","description":"Number of months a subscription is renewed after its expiration time if it has not been terminated.","format":"int32"},"differentInvoiceIssuer":{"maxLength":100,"minLength":0,"type":"string","description":"Specifies the invoicing company's name, used when billing is outsourced. Enter the legal name of the company handling invoices, different from the service provider. \nApplicable for organizations that outsource billing but manage service provision. Leave blank if billing is handled on your own.","nullable":true},"id":{"type":"integer","description":"The id to identify the offer in the system.","format":"int32"},"type":{"$ref":"#/components/schemas/OfferType"},"purchasePrice":{"maximum":1.7976931348623157e+308,"minimum":0,"type":"number","description":"The price charged only once after providing the item.","format":"double"},"recurringPrice":{"maximum":1.7976931348623157e+308,"minimum":0,"type":"number","description":"The price charged monthly after providing the item for the subscription period","format":"double"},"currency":{"minLength":1,"type":"string","description":"Currency in ISO 4217"},"subscriptionPeriod":{"maximum":2147483647,"minimum":0,"type":"integer","description":"The minimum subscription period (in months) for rental offers.","format":"int32"},"name":{"type":"string","description":"Name of the offer","nullable":true},"externalId":{"type":"string","description":"Value to identify the offer in other systems. E.g. when another system is the source of this offer.","nullable":true},"isDefault":{"type":"boolean","description":"Indicates if this offer is a default offer for the service."},"self":{"$ref":"#/components/schemas/ResourceLink"}},"additionalProperties":false},"OfferType":{"enum":["rental","lease","purchase","subscription","leasing"],"type":"string"},"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/sales/services/{serviceId}/offers/{offerId}":{"put":{"tags":["Sales | Services"],"summary":"Updates an existing sales service offer","parameters":[{"name":"serviceId","in":"path","description":"The identifier of the sales service for which the offer is to be updated","required":true,"schema":{"type":"integer","format":"int32"}},{"name":"offerId","in":"path","description":"The identifier of the offer to be updated","required":true,"schema":{"type":"integer","format":"int32"}}],"requestBody":{"description":"Information to overwrite existing sales service offer","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceOfferUpdate"}}}},"responses":{"200":{"description":"OK: Returns the updated product.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceOffer"}}}},"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 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"}}}}}}}}}
```

## DELETE /v1/sales/services/{serviceId}/offers/{offerId}

> Deletes an existing sales service offer

```json
{"openapi":"3.0.4","info":{"title":"Equipme Supplier API","version":"v1"},"tags":[{"name":"Sales | Services"}],"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/sales/services/{serviceId}/offers/{offerId}":{"delete":{"tags":["Sales | Services"],"summary":"Deletes an existing sales service offer","parameters":[{"name":"serviceId","in":"path","description":"The identifier of the sales service for which the offer is to be deleted","required":true,"schema":{"type":"integer","format":"int32"}},{"name":"offerId","in":"path","description":"The identifier of the offer to be deleted","required":true,"schema":{"type":"integer","format":"int32"}}],"responses":{"204":{"description":"NoContent: Delete successful."},"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 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-pro/sales-or-services.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.
