> 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"}},"total":{"type":"integer","format":"int32"},"self":{"$ref":"#/components/schemas/ResourceLink"}},"additionalProperties":false},"ResourceLink":{"type":"object","properties":{"href":{"type":"string","nullable":true},"method":{"type":"string","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."},"customers":{"type":"array","items":{"$ref":"#/components/schemas/CustomerReference"},"description":"Customers this offer is available to. Present only when the calling tenant is this offer's\nproduct supplier - absent from the response for every other caller. When present, null means\nthe offer is available to all direct customers; an empty list means it is available to none of\nthem.","nullable":true},"self":{"$ref":"#/components/schemas/ResourceLink"}},"additionalProperties":false},"OfferType":{"enum":["rental","lease","purchase","subscription","leasing"],"type":"string"},"CustomerReference":{"required":["id","name","self"],"type":"object","properties":{"id":{"type":"integer","description":"The identifier of the customer.","format":"int32"},"name":{"minLength":1,"type":"string","description":"The name of the customer."},"customerNumber":{"type":"string","description":"Optional identifier of the customer defined by the supplier.","nullable":true},"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":{"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":{"syncPriceFromBom":{"type":"boolean","description":"Determines if the Prices are synced to the sales offers of the mapped products"},"currency":{"$ref":"#/components/schemas/Currency"},"name":{"maxLength":50,"minLength":0,"type":"string","description":"Name of the offer","nullable":true},"type":{"$ref":"#/components/schemas/OfferType"},"regions":{"type":"array","items":{"type":"string"},"description":"Regions the offer is available in, as upper-case ISO 3166-1 alpha-2 codes. A code is taken as\nsent, so 'de' is rejected rather than read as 'DE'. Absent or null makes the offer available\nwith no region restriction.","nullable":true},"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},"customerIds":{"type":"array","items":{"type":"integer","format":"int32"},"description":"Customer IDs for which the service offer is available. Null makes the offer available to all direct\ncustomers of the service, an empty array to none of them, a non-empty array to exactly those. When\nabsent from the request body, availability is left unchanged.","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":{"type":"object","properties":{"href":{"type":"string","nullable":true},"method":{"type":"string","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."},"customers":{"type":"array","items":{"$ref":"#/components/schemas/CustomerReference"},"description":"Customers this offer is available to. Present only when the calling tenant is this offer's\nproduct supplier - absent from the response for every other caller. When present, null means\nthe offer is available to all direct customers; an empty list means it is available to none of\nthem.","nullable":true},"self":{"$ref":"#/components/schemas/ResourceLink"}},"additionalProperties":false},"CustomerReference":{"required":["id","name","self"],"type":"object","properties":{"id":{"type":"integer","description":"The identifier of the customer.","format":"int32"},"name":{"minLength":1,"type":"string","description":"The name of the customer."},"customerNumber":{"type":"string","description":"Optional identifier of the customer defined by the supplier.","nullable":true},"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":{"type":"object","properties":{"href":{"type":"string","nullable":true},"method":{"type":"string","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."},"customers":{"type":"array","items":{"$ref":"#/components/schemas/CustomerReference"},"description":"Customers this offer is available to. Present only when the calling tenant is this offer's\nproduct supplier - absent from the response for every other caller. When present, null means\nthe offer is available to all direct customers; an empty list means it is available to none of\nthem.","nullable":true},"self":{"$ref":"#/components/schemas/ResourceLink"}},"additionalProperties":false},"OfferType":{"enum":["rental","lease","purchase","subscription","leasing"],"type":"string"},"CustomerReference":{"required":["id","name","self"],"type":"object","properties":{"id":{"type":"integer","description":"The identifier of the customer.","format":"int32"},"name":{"minLength":1,"type":"string","description":"The name of the customer."},"customerNumber":{"type":"string","description":"Optional identifier of the customer defined by the supplier.","nullable":true},"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/{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":{"type":"object","properties":{"href":{"type":"string","nullable":true},"method":{"type":"string","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."},"customers":{"type":"array","items":{"$ref":"#/components/schemas/CustomerReference"},"description":"Customers this offer is available to. Present only when the calling tenant is this offer's\nproduct supplier - absent from the response for every other caller. When present, null means\nthe offer is available to all direct customers; an empty list means it is available to none of\nthem.","nullable":true},"self":{"$ref":"#/components/schemas/ResourceLink"}},"additionalProperties":false},"OfferType":{"enum":["rental","lease","purchase","subscription","leasing"],"type":"string"},"CustomerReference":{"required":["id","name","self"],"type":"object","properties":{"id":{"type":"integer","description":"The identifier of the customer.","format":"int32"},"name":{"minLength":1,"type":"string","description":"The name of the customer."},"customerNumber":{"type":"string","description":"Optional identifier of the customer defined by the supplier.","nullable":true},"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/{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":{"type":"object","properties":{"href":{"type":"string","nullable":true},"method":{"type":"string","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"}},"total":{"type":"integer","format":"int32"},"self":{"$ref":"#/components/schemas/ResourceLink"}},"additionalProperties":false},"ResourceLink":{"type":"object","properties":{"href":{"type":"string","nullable":true},"method":{"type":"string","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},"plannedPurchaseOrder":{"type":"boolean","description":"Whether the offer is planned to be procured through a purchase order rather than fulfilled\nfrom stock."},"regions":{"type":"array","items":{"type":"string"},"description":"Regions the offer is available in, as ISO 3166-1 alpha-2 codes. An empty array is an offer\nwith no region restriction.","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."},"customers":{"type":"array","items":{"$ref":"#/components/schemas/CustomerReference"},"description":"Customers this offer is available to. Present only when the calling tenant is this offer's\nproduct supplier - absent from the response for every other caller. When present, null means\nthe offer is available to all direct customers; an empty list means it is available to none of\nthem.","nullable":true},"self":{"$ref":"#/components/schemas/ResourceLink"}},"additionalProperties":false},"OfferType":{"enum":["rental","lease","purchase","subscription","leasing"],"type":"string"},"CustomerReference":{"required":["id","name","self"],"type":"object","properties":{"id":{"type":"integer","description":"The identifier of the customer.","format":"int32"},"name":{"minLength":1,"type":"string","description":"The name of the customer."},"customerNumber":{"type":"string","description":"Optional identifier of the customer defined by the supplier.","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}/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":{"syncPriceFromBom":{"type":"boolean","description":"Determines if the Prices are synced to the sales offers of the mapped products"},"currency":{"$ref":"#/components/schemas/Currency"},"name":{"maxLength":50,"minLength":0,"type":"string","description":"Name of the offer","nullable":true},"type":{"$ref":"#/components/schemas/OfferType"},"regions":{"type":"array","items":{"type":"string"},"description":"Regions the offer is available in, as upper-case ISO 3166-1 alpha-2 codes. A code is taken as\nsent, so 'de' is rejected rather than read as 'DE'. Absent or null makes the offer available\nwith no region restriction.","nullable":true},"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},"customerIds":{"type":"array","items":{"type":"integer","format":"int32"},"description":"Customer IDs for which the service offer is available. Null makes the offer available to all direct\ncustomers of the service, an empty array to none of them, a non-empty array to exactly those. When\nabsent from the request body, availability is left unchanged.","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},"plannedPurchaseOrder":{"type":"boolean","description":"Whether the offer is planned to be procured through a purchase order rather than fulfilled\nfrom stock."},"regions":{"type":"array","items":{"type":"string"},"description":"Regions the offer is available in, as ISO 3166-1 alpha-2 codes. An empty array is an offer\nwith no region restriction.","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."},"customers":{"type":"array","items":{"$ref":"#/components/schemas/CustomerReference"},"description":"Customers this offer is available to. Present only when the calling tenant is this offer's\nproduct supplier - absent from the response for every other caller. When present, null means\nthe offer is available to all direct customers; an empty list means it is available to none of\nthem.","nullable":true},"self":{"$ref":"#/components/schemas/ResourceLink"}},"additionalProperties":false},"CustomerReference":{"required":["id","name","self"],"type":"object","properties":{"id":{"type":"integer","description":"The identifier of the customer.","format":"int32"},"name":{"minLength":1,"type":"string","description":"The name of the customer."},"customerNumber":{"type":"string","description":"Optional identifier of the customer defined by the supplier.","nullable":true},"self":{"$ref":"#/components/schemas/ResourceLink"}},"additionalProperties":false},"ResourceLink":{"type":"object","properties":{"href":{"type":"string","nullable":true},"method":{"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}/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},"plannedPurchaseOrder":{"type":"boolean","description":"Whether the offer is planned to be procured through a purchase order rather than fulfilled\nfrom stock."},"regions":{"type":"array","items":{"type":"string"},"description":"Regions the offer is available in, as ISO 3166-1 alpha-2 codes. An empty array is an offer\nwith no region restriction.","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."},"customers":{"type":"array","items":{"$ref":"#/components/schemas/CustomerReference"},"description":"Customers this offer is available to. Present only when the calling tenant is this offer's\nproduct supplier - absent from the response for every other caller. When present, null means\nthe offer is available to all direct customers; an empty list means it is available to none of\nthem.","nullable":true},"self":{"$ref":"#/components/schemas/ResourceLink"}},"additionalProperties":false},"OfferType":{"enum":["rental","lease","purchase","subscription","leasing"],"type":"string"},"CustomerReference":{"required":["id","name","self"],"type":"object","properties":{"id":{"type":"integer","description":"The identifier of the customer.","format":"int32"},"name":{"minLength":1,"type":"string","description":"The name of the customer."},"customerNumber":{"type":"string","description":"Optional identifier of the customer defined by the supplier.","nullable":true},"self":{"$ref":"#/components/schemas/ResourceLink"}},"additionalProperties":false},"ResourceLink":{"type":"object","properties":{"href":{"type":"string","nullable":true},"method":{"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}/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"}}}}}}}}}
```

## Updates an existing sales service offer

> Default promotion here always applies globally, regardless of the offer's own customer scope.

```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":{"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},"customerIds":{"type":"array","items":{"type":"integer","format":"int32"},"description":"Customer IDs for which the service offer is available. Null makes the offer available to all direct\ncustomers of the service, an empty array to none of them, a non-empty array to exactly those. When\nabsent from the request body, availability is left unchanged.","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},"plannedPurchaseOrder":{"type":"boolean","description":"Whether the offer is planned to be procured through a purchase order rather than fulfilled\nfrom stock."},"regions":{"type":"array","items":{"type":"string"},"description":"Regions the offer is available in, as ISO 3166-1 alpha-2 codes. An empty array is an offer\nwith no region restriction.","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."},"customers":{"type":"array","items":{"$ref":"#/components/schemas/CustomerReference"},"description":"Customers this offer is available to. Present only when the calling tenant is this offer's\nproduct supplier - absent from the response for every other caller. When present, null means\nthe offer is available to all direct customers; an empty list means it is available to none of\nthem.","nullable":true},"self":{"$ref":"#/components/schemas/ResourceLink"}},"additionalProperties":false},"OfferType":{"enum":["rental","lease","purchase","subscription","leasing"],"type":"string"},"CustomerReference":{"required":["id","name","self"],"type":"object","properties":{"id":{"type":"integer","description":"The identifier of the customer.","format":"int32"},"name":{"minLength":1,"type":"string","description":"The name of the customer."},"customerNumber":{"type":"string","description":"Optional identifier of the customer defined by the supplier.","nullable":true},"self":{"$ref":"#/components/schemas/ResourceLink"}},"additionalProperties":false},"ResourceLink":{"type":"object","properties":{"href":{"type":"string","nullable":true},"method":{"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}/offers/{offerId}":{"put":{"tags":["Sales | Services"],"summary":"Updates an existing sales service offer","description":"Default promotion here always applies globally, regardless of the offer's own customer scope.","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"}}}}},"deprecated":true}}}}
```

## 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"}}}}}}}}}
```

## Partially updates an existing sales service offer

> Please provide a valid JSON Patch document with the allowed fields to update. See example below for further details.\
> \`customerIds\` is replaced as a whole through \`replace /customerIds\` (an array of ids, a map\
> keyed by id, or \`null\` for all customers), and one customer is added, replaced or removed through\
> \`/customerIds/{customerId}\`. Assign several customers in one call with several member operations\
> in the same document. A patch document expresses intent and cannot be produced by diffing two \`GET\`\
> response bodies, since those serve \`customerIds\` as an array of references rather than as the map\
> JSON Patch addresses.

```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}/offers/{offerId}":{"patch":{"tags":["Sales | Services"],"summary":"Partially updates an existing sales service offer","description":"Please provide a valid JSON Patch document with the allowed fields to update. See example below for further details.\n`customerIds` is replaced as a whole through `replace /customerIds` (an array of ids, a map\nkeyed by id, or `null` for all customers), and one customer is added, replaced or removed through\n`/customerIds/{customerId}`. Assign several customers in one call with several member operations\nin the same document. A patch document expresses intent and cannot be produced by diffing two `GET`\nresponse bodies, since those serve `customerIds` as an array of references rather than as the map\nJSON Patch addresses.","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 of the sales service offer 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 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 by asking a question.

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

```
GET https://hub.equipme.io/development/api-reference-pro/sales-or-services.md?ask=<question>&goal=<user_goal>
```

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

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

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