{
  "openapi": "3.1.0",
  "info": {
    "version": "v4.28.3",
    "description": "# API specification\n\nThis documentation describes the data resources and technical details available for the RELEX Data API. \n\nIn short:\n\n* The data resources are divided by tags according to data type. \n* The payload contents of individual resources are described in detail with example payload data.\n\n> \u26a0\ufe0f **All API requests must be made over HTTPS**\n>\n> Calls made over plain HTTP fail and return HTTP Status Code 400 Bad Request.\n\n## Glossary\n\n* A **resource** is an object with a type, associated data, relationships to other resources, and a set of methods that operate on it. In practice, *the resource* most often maps to a corresponding database table, but not always.\n* An **environment** (also tier) is a computer system or set of systems in which a computer program or software component is deployed and executed. The most common setup for RELEX Data API clients is to have *user-acceptance-test* and *production* environments.\n\n## REST as an architectural style\n\nREST stands for Representational State Transfer which is an architectural pattern describing how distributed systems can expose a consistent interface through the web. When people use the term *REST API*, they are generally referring to an API accessed via HTTP protocol at a predefined set of URLs.\n\nThe RELEX Data API is built around these concepts and has predictable resource-oriented URLs, accepts JSON-encoded requests, returns JSON-encoded responses, and uses standard HTTP response codes, authentication, and HTTP verbs.\n\nThe biggest difference to traditional record-oriented REST APIs is that the RELEX Data API can ingest multiple records into a single HTTP request. This allows the clients to bundle individual changes into small batches and send them in one request.\n\nThis typically increases performance and reduces the overhead of handling individual requests. This style is prevalent in the RELEX Data API regardless of the HTTP verb used.\n\n> \u26a0\ufe0f **We strongly recommend using micro-batches (small batches of records) whenever possible.**\n> \n>Micro-batches provide significantly better throughput, reduce request overhead, and help avoid hitting rate limits during high-volume updates.\n\n## OpenAPI Specification\n\nThe API is documented in **OpenAPI format** and is based on the Data API provided by RELEX. For more information on OpenAPI format, refer to the [OpenAPI Specification](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md). This documentation is created by using the [ReDoc](https://github.com/Rebilly/ReDoc) tool.\n\n## Continuous data streams\n\nThe RELEX Data API is designed to receive data as a continuous stream. The API allows the clients to send the data whenever changes happen, either one record at a time or in batches of records. Hence, there are no explicit start and end notions for a set of data.\n\nInstead, data is processed as it arrives, whenever the backend systems deem it appropriate. While typically the data is processed in the order it arrives, due to the nature of distributed systems, RELEX may process data received in subsequent requests in a different order than originally sent.\n\n> \u26a0\ufe0f **Avoid making immediate subsequent updates to the same record**\n>\n> We discourage making numerous mutative API calls to the same records in rapid succession, in other words, POST and DELETE requests.\n>\n> Instead, we recommend batching the same records into one request. Making quick consecutive updates for the same record may cause a race condition that can cause the data to get out of sync between the client and RELEX.\n\n> \n> \u26a0\ufe0f **Using micro-batches is the preferred pattern for continuous data streams.**\n> \n> Sending multiple small updates in one batch reduces the number of API calls, minimizes the chance of race conditions, and significantly lowers the likelihood of hitting rate limits during heavy traffic.  \n> Single-record requests should be reserved for low-volume or exceptional cases only.\n\n### Cross-endpoint record coordination\n\nThe RELEX Data API does not coordinate supplied records across endpoints. This means that if two records are supplied to two distinct endpoints, the API might make them available for target applications to consume in either order (records within one endpoint will always be made available in the order they were supplied to the API). If the two records are somehow related to each other and no additional steps were taken, the end result could depend on which record is consumed first. To prevent this, target applications might take additional steps to guarantee identical results regardless of inter-topic consumption order. Using UPSERT logic (i.e. update if exists, otherwise create) is a common way to accomplish this.\n\nMany endpoints are connected to each other in the data models of target applications. For example, the Product Locations endpoint expects both a product code and a location code. The given codes are typically used to link the supplied record to the corresponding product and location in the target application. Such links are only possible if the referenced records exist. To remove the dependency on consumption order, an incoming product-location record might result in automatic creation of the referenced product and location if they do not already exist so that the needed references are in place. The same principle applies to many other endpoints. When automatic reference creation creates an entry, typically only the required fields and fields with default values are populated.\n\n## JSON format\n\nThe RELEX Data API uses JSON as the format for data serialization. The JSON payload of the API has a root-level object that contains a meta-object and data array element. Requests need to define a Content-Type header and be set to *application/json*.\n\nAll resources have a defined schema, and the details of each resource can be examined in the resource specifications in this document.\n\n## Dates, times and timestamps\n\nDates, times and timestamps in RELEX Data API generlly follows the Date and Times JSON Schema format which is based on [RFC 3339](https://www.rfc-editor.org/rfc/rfc3339.html) standard, unless otherwise specified (for example endpoints with `time` fields are usually accepting only `hh:mm`).\n\n## Localization of names\n\nIf the consumer application supports localization of names, the corresponding name for a specific language can be set by adding one of the following fields to the schema.\n\n| Language             | Endonym               | field_name     |\n|----------------------|-----------------------|----------------|\n| Czech                | \u010ce\u0161tina               | name_cs        |\n| Danish               | Dansk                 | name_da        |\n| German               | Deutsch               | name_de        |\n| Greek                | \u0395\u03bb\u03bb\u03b7\u03bd\u03b9\u03ba\u03ac              | name_el        |\n| English              | English               | name_en        |\n| Spanish              | Espa\u00f1ol               | name_es        |\n| Estonian             | Eesti keel            | name_et        |\n| Finnish              | Suomeksi              | name_fi        |\n| French               | Fran\u00e7ais              | name_fr        |\n| Croatian             | Hrvatski              | name_hr        |\n| Hungarian            | Magyar nyelv          | name_hu        |\n| Italian              | Italiano              | name_it        |\n| Japanese             | \u65e5\u672c\u8a9e                 | name_ja        |\n| Korean               | \ud55c\uad6d\uc5b4                  | name_ko        |\n| Lithuanian           | Lietuvi\u0173              | name_lt        |\n| Latvian              | Latviski              | name_lv        |\n| Dutch                | Nederlands            | name_nl        |\n| Norwegian            | Norsk                 | name_no        |\n| Polish               | Polski                | name_pl        |\n| Portuguese (Brazil)  | Portugu\u00eas (Brazil)    | name_pt_BR     |\n| Portuguese           | Portugu\u00eas             | name_pt        |\n| Romanian             | Rom\u00e2n\u0103                | name_ro        |\n| Russian              | \u0420\u0443\u0441\u0441\u043a\u0438\u0439               | name_ru        |\n| Slovenian            | Sloven\u0161\u010dina           | name_sl        |\n| Slovak               | Sloven\u010dina            | name_sk        |\n| Serbian              | \u0421\u0440\u043f\u0441\u043a\u0438 (Srpski)       | name_sr        |\n| Swedish              | Svenska               | name_sv        |\n| Thai                 | \u0e44\u0e17\u0e22                   | name_th        |\n| Turkish              | T\u00fcrk\u00e7e                | name_tr        |\n| English (UK)         | English (UK)          | name_uk        |\n| Vietnamese           | Ti\u1ebfng Vi\u1ec7t            | name_vi        |\n| Chinese              | \u7b80\u4f53\u4e2d\u6587                | name_zh        |\n\n## Data processing and asynchronicity\n\nAll inbound API resources work in the same way: they consist of synchronous and asynchronous parts.\n\n* Authentication, data validation, and persisting incoming data are done synchronously and immediately when the client sends the data.\n* The client receives a response with a 200 HTTP status code if RELEX is able to accept the request successfully and process it further.\n* If any part of the synchronous part fails, a non-2xx status code is returned. A failure indicates that RELEX has not received the data successfully, and it can not be processed further. Consequently, *the client must send the data again*.\n* After the synchronous operation, the data processing moves to an asynchronous stage. All subsequent actions are done asynchronously in the RELEX Platform outside the request-reply context.\n\nThe Data API also includes a feature called Error  API that the client can use to check for errors. For more information, see the asynchronous section.\n\n## Payload compression\n\nThe RELEX Data API does not support payload compression. Requests must omit the **Content-Encoding** header or define it as **none**.\n\n## Data validation\n\nThe RELEX Data API uses all-or-nothing semantics. For a given payload, either all records are accepted or none are. In other words, one invalid record in an otherwise valid set makes the whole set invalid.\n\nThe invalid record must be fixed or removed, and the payload sent again to allow the valid records to be processed.\n\nOn the other hand, the downstream applications handle records individually. This means that once the Data API has accepted the records, the later parts of the processing behave differently with invalid records. \n\nProblematic records are put aside and logged (see [Event API](#section/API-Specification/Errors-from-asynchronous-processing)), and processing continues from the next record.\n\n## Custom fields and resources\n\nThe RELEX Data API supports bespoke data models. To facilitate receiving custom data via standard API, the API provides bespoke resources for custom fields and resources.\n\nThe customer-specific API document includes all the resources in full, containing both standard and custom fields and resources, and their schemas.\n\n### Custom resources\n\nCustom resources follow the same concepts and patterns as standard resources, including the following patterns:\n\n* HTTP verbs: verb to denote the action type\n* Naming: human-readable resource names, plural, lowercase, separated by an underscore\n* Return codes: 2xx for success, 4xx and 5xx for failures\n\nCustom resources are added to a dedicated namespace. This is done to prevent a naming collision when new resources are added to the standard RELEX Data API interface. The namespace for custom resources is `custom`. This makes the resource path look like`/data/custom/resource`.\n\n### Custom fields\n\nSimilarly to custom resources, customer-specific fields can also be added to standard REST interfaces.\n\nCustom fields follow the same concepts as standard fields:\n\n* Naming: human-readable field names, plural, lowercase, separated by an underscore\n\nAs with resources, custom fields are also namespaced. The namespacing is done by prefixing each custom field name. The prefix is `custom_`. The resource remains otherwise the same, and all existing resources are not affected.  \n\nAs an example, when a *color* field is added to the `products` resource, the corresponding attribute in the JSON payload is named `custom_colour` and is available at the `/data/master/products` resource.\n\nYou can also remove *optional* fields from the standard resources, but there is rarely a need for that because they can be freely omitted from the request payload.\n\nIt is **not** possible to add arbitrary fields to the resources. Each field, standard and custom, must be declared in the resource schema.\n\n> \u2139\ufe0f **Custom resources do not use field prefixes**\n>\n> The fields in **custom resources** do not need to have the prefix since they are already under a distinct namespace. Thus, the fields in custom resources have no special naming requirements.\n\n## API version\n\nTo support the managed evolution of the Data API, we version its public interfaces. We have one version number that communicates all the changes to the API. This is simply called the *API version*.\n\nUnder the hood, the API version is a combination of the following:\n\n* **Core** version comprising of API semantics and usage patterns, such as authorization, payload formats, and details of requests and responses. This versioning is referred to as the *Core version* in this document.\n* **Data model version** comprising of the standard interfaces, payload schemas, and customization to existing or new resources requested by the customer. This versioning is referred to as the *data model version* in this document.\n\nThe API version is an abstraction over the two separate version concepts. For an API client, it is enough just to follow the API version.\n\n### Semantic versioning\n\nAll our version identifiers follow [semantic versioning](https://semver.org/spec/v2.0.0.html) principles. Each change to the semantics of the API increments one of the three parts of the API version number: MAJOR, MINOR, or PATCH.\n\nThe following changes guarantee an increment in the API version number:\n\n* **MAJOR** version when you make incompatible API changes,\n* **MINOR** version when you add functionality in a backward-compatible manner, and\n* **PATCH** version when you make backward-compatible bug fixes.\n\nAdditional labels for pre-release and build metadata can be used as extensions to the MAJOR.MINOR.PATCH format. For instance, `4.2.2-beta` is an allowed version specifier.\n\nThe versioning policy guarantees that only a MAJOR version upgrade can require the client to make changes.\n\nOne environment can host only one version at a time: it is not possible to have more than one version of the API running simultaneously in, for example, a *production* environment.\n\nHowever, different environments may run different versions concurrently. For example, a *user-acceptance-test* version can have a more recent version running than the *production* API.\n\n#### Version compatibility and deprecation\n\nRELEX strives to the utmost to maintain API compatibility between versions by introducing changes in a non-breaking manner whenever possible.\n\nWhen the API evolves, new features are typically added as additional resources, new fields, or new features. We avoid removing or changing existing functionality in a breaking way unless there is a very compelling reason, such as a security improvement.\n\nWith this approach, the API remains compatible even in the case of new or improved features, and the API clients can mostly remain the same. The clients may simply ignore the elements that are introduced without any adverse consequences. Only when a client explicitly takes a new feature into use, must it be adapted.\n\nIn the rare event of a breaking change, a new MAJOR core version is introduced. In that case, the feature is put behind a [feature flag](https://en.wikipedia.org/wiki/Feature_toggle). The flag by default is set to follow the existing behavior.\n\nThe customer has three (3) months to adapt to the upcoming version change before the feature flag is automatically made to follow the new behavior. Upgrade instructions are provided.\n\nThere are two exceptions to this rule:\n**A critical security-related issue is fixed immediately.** If we discover a critical security issue in the API, we do whatever is necessary to mitigate the issue as soon as possible. The fix may include disabling the vulnerable functionality until a proper solution is available. In that case, the clients need to adapt to the changes quickly.\n**Changes to customer data models** are visible immediately and are not behind feature flags.\n\n### Core versioning\n\nThe core version is derived from the changes in the system behavior, features, or other non-customer-specific changes.\n\nChanges to the core version can be; for example: \n* Introducing a new metadata resource to the API,\n* Changing the authentication pattern, or \n* Adding a new common field to a response payload.\n\nThe core version is *not* affected by changes to the data model or internal changes that do not affect the functional behavior of the system, such as updates to internal dependencies or performance improvements.\n\n### Data model versioning\n\nData API supports customer-specific bespoke fields and resources, and, commonly, customers use this powerful feature to tailor the API to their needs.\n\nDuring the project phase, it is customary that the APIs evolve rapidly. The changes may be small but breaking; for instance, changing a field data type. Or the change can be big but non-breaking, such as adding two new resources to the data model. Because the pace and nature of these changes are unrelated to API behavioral changes, the data model and the **core** version are versioned separately.\n\n### API version number\n\nThe exact version for the API combines both the *core version* and *the data model version*. It is formed by summing each semantic version number. For instance, *core* version `1.2.3` and *data model* version `4.3.2` creates an *API version* `5.5.5`. Possible suffixes are concatenated.\nAll version numbers can be queried through the API using a corresponding resource.\n\n## Resources, verbs, and URLs\n\nUnder REST principles, a URL identifies a resource. The following URL design patterns are considered REST best practices, which the RELEX Data API also follows.\n\n* URLs should include nouns, not verbs\n* Use plural nouns for consistency (no singular nouns)\n* Use HTTP methods (HTTP/1.1) to operate on the resources\n\nFor consistency, we have also defined the following practices for resource URIs:\n\n* written in lower-case letters\n* spaces are replaced with dashes (`-`)\n* resources must reside in pre-defined namespaces\n\nThe URL for the API is `PROTOCOL://ENV-GEOGRAPHY.rest.HOST/CUSTOMER`, which consists of the following parts:\n\n* `PROTOCOL` always HTTPS\n* `ENV` denoting the environment, for example, `prod`\n* `GEOGRAPHY` denoting the geography or region, for example, `us`\n* `HOST` denoting the hostname for the service, always `relexsolutions.com`\n* CUSTOMER denoting the name of the customer, for example, `bigretailer`\n\nThe API base URL, therefore, could be; for example:\n\n* uat: `uat-eu.rest.relexsolutions.com`\n* prod: `eu.rest.relexsolutions.com`\n\n### Resource namespaces\n\nThe RELEX Data API exposes the following top-level resource namespaces:\n\n* *meta*: metadata resources for business data-related aspects, such as version information\n* *data*: data namespace for business data\n  * *master*: master data resources\n  * *custom*: custom customer-specific resources\n  * *transactions*: transaction data resources\n\n### Data operations and HTTP verbs\n\nThis section describes how data operations (List, Upsert, and Delete) are mapped to HTTP verbs.\n\n| Operations      | HTTP Mapping | Request Body                             | Response Body                     |\n|-----------------|--------------|------------------------------------------|-----------------------------------|\n| List            | GET          | N/A                                      | List of records                   |\n| Delete          | DELETE       | List of records to be deleted            | Operation success or error status |\n| Upsert          | POST         | List of records to be created or updated | Operation success or error status |\n\nThe RELEX Data API deviates slightly from the traditional REST approach by commonly treating the data as collections of records instead of singular records. In practice, the API accepts and returns multiple records in one request. The other notable deviation is the usage of POST for both creating new records and updating existing records.\n\nAs RELEX operates with big datasets, the number of records sent and received through the API can be fairly large. Encoding multiple records in one request increases the API throughput as it dramatically reduces the number of individual requests that clients need to make.\n\nThis pattern applies to most of the resources regardless of the used verb. A client may create several records in a single request using the POST verb, or delete one or more records using the DELETE verb.\n\nAn important concept closely related to HTTP verbs is *idempotency*. An idempotent method means that the result of a successfully performed request is independent of the number of times the request is executed. Non-idempotent is the opposite: It means that the result may change if the request is performed more than once, even if the data remains the same.\n\n#### HTTP POST for data resources\n\nHTTP POST is used for sending records to the API in a maximum of one (1) megabyte-sized chunks per single request. A single POST request may contain one or more records that are ingested into RELEX systems.\n\nData API POST interfaces are based on the colloquial *upsert* model: new records are created for the payload items that have no matching counterparts in the RELEX database. Records that have matching database records are updated. A single request may simultaneously create new records and update existing records.\n\n**POST requests to data resources are idempotent.** Resending the same payload is safe and produces the same result. In practice, this means that if you are uncertain whether a request was received, for example due to a network failure before the response arrived, you can resend the same request without risk of creating duplicate records.\n\n##### Suggestion for data processing\n\nWhen sending data using RELEX Data API we recommend that the customer provide a `batch_id` along with each request. It is useful for the customer and RELEX to correlate processing output artifacts such as logs to the request payload.\n\nTogether within the `batch_id` we recommend sending a `timestamp` within each request. This is used internally for logging, and telemetry purposes.\n\nThese attributes are submitted in the request body `meta` section. Both items are optional but *highly recommended* to guarantee efficient operation.\n\n* A `batch_id` is a customer-specified identifier for the logical batch that is being sent. The format is [UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier). Each logically separate request must have a different batch_id. Retries of the same request must use the same batch_id.\n* A `timestamp` is a value RELEX uses internally. The format of the value must be a monotonically increasing integer. If the data is sent from multiple different sources to a single resource, the clients must ensure that the different systems use the same source for the timestamp value.\n\n#### HTTP DELETE for data resources\n\nHTTP DELETE is used for deleting records in RELEX. A DELETE request may delete one or more records at a time.\n\nDELETE request is idempotent. This practice means that the first request deletes the specified rows, and subsequent retries are ignored.\n\nDeleting records is possible from master data tables. The full list of resources supporting the DELETE method can be seen in the resources section of this document.\n\n#### HTTP GET for data resources\n\nHTTP GET is used for fetching records from RELEX. A GET response contains zero or more records stored in RELEX databases.\n\nGET request is idempotent and causes no side effects.\n\n## Quotas and limits\n\nThe RELEX Data API imposes limits on incoming web requests to ensure performance, reliability, and efficiency. The API sets the following limits:\n\n* The maximum size of any POST request is 1 MB\n* The rate limit of requests per second is 5 (subject to discussion)\n\nIn case the limits are exceeded, a corresponding HTTP status code is returned with an error message detailing the issue.\n\n> \u26a0\ufe0f **Exceeding payload sizes**\n>\n> In the event that the payload size exceeds 1 MB, the data needs to be split into smaller chunks and sent in multiple independent requests. Each chunk is then processed separately by RELEX.\n>\n> \u2139\ufe0f  API limits are subject to change and appropriate values are determined during the implementation project.\n\nThe RELEX Data API imposes no limits on return payloads. The payload size can be arbitrarily large.\n\n### Exceeding limits\n\nIn the event of exceeding the rate-limit and receiving an HTTP status code 429, the error payload is the following:\n\n```json\n    {\n    \"type\": \"https://example.com/probs/rate-limit-exceeded\",\n    \"title\": \"You have exceeded rate limit\",\n    \"status\": 429,\n    \"detail\": \"Your rate limit has been exceeded. Please retry later.\"\n    }\n```\n\nIn the event of exceeding the request payload size-limit and receiving an HTTP status code 413, the error payload is the following:\n\n```json\n    {\n    \"type\": \"https://example.com/probs/size-limit-exceeded\",\n    \"title\": \"Payload Too Large\",\n    \"status\": 413,\n    \"detail\": \"Payload was larger than 1mb\"\n    }\n```\n\n## Error responses\n\nThe RELEX Data API uses regular HTTP response codes to indicate the various failures an API request can return. Codes in the 4xx range indicate an error on the client side, for example, the resource name was incorrect. Codes in the 5xx range indicate an error within RELEX services.\n\nTo convey details about errors to clients in JSON responses, the RELEX Data API uses the [RFC 7807](https://tools.ietf.org/html/rfc7807) standard.\n\n| Error code                | Description                                                                                            |\n|---------------------------|--------------------------------------------------------------------------------------------------------|\n| 400 Bad Request           | The request was unacceptable, for example, due to a missing parameter                                  |\n| 401 Unauthorized          | The client is unauthorized. The bearer token provided might be invalid, expired, or revoked            |\n| 403 Forbidden             | The client is forbidden. This might be due to connectivity restriction                                 |\n| 404 Page Not Found        | Resource was not found                                                                                 |\n| 413 Content Too Large     | Size limits exceeded. See more in the rate limits section                                              |\n| 429 Too many requests     | Rate limits exceeded. See more in the rate limits section                                              |\n| 500 Internal server error | Generic server error indicating an unexpected problem. A client may retry                              |\n| 503 Service unavailable   | The service is temporarily unavailable, for example, due to a system upgrade. A client may retry later |\n\n## Errors from asynchronous processing\n\nThe RELEX Data API provides a resource that can be used to query errors emitted during the asynchronous processing; that is, after the data has been successfully ingested by the RELEX Data API.\n\nThe nature of asynchronous processing is such that errors can appear at any moment until the data processing finishes. For this reason, the response to the request might be different over time. Hence, the resource needs to be queried periodically to get the full result.\n\n### Fetching errors\n\nThere are two mutually exclusive ways of fetching errors: either by request or by time.\n\nFor fetching errors for a particular request, the client must supply a `request_id`.  The `request_id` parameter is an identifier that is returned in the response for all POST and DELETE requests. The identifier can then be used later to track the ingestion errors for that particular request. Think of it as a handle for an asynchronous background processing job.\n\nFor fetching errors by time, a `start_timestamp` (inclusive) and `end_timestamp` (exclusive) pair must be supplied. Timestamps can be used for fetching all ingestion errors that occurred during the specified time window.\n\nFetching by request and timestamp are mutually exclusive. They cannot be used simultaneously.\n\n### Pagination of error responses\n\nTo limit the potential response size, the number of errors returned in one response is capped.\n\nThe following optional query parameters must be used when the number of errors exceeds the amount one response can return.\n\n* `page` is used to define the desired set of all available sets when the amount of errors in the response is more than the limit.\n* `per_page` is used to define the maximum amount of items one response can hold. There is an upper maximum (10000) for the parameter that cannot be exceeded.\n\nTo be able to traverse between pages more easily, the RELEX Data API also provides links to the subsequent pages. Each error response contains the following structure:\n\n```json\n\"_links\": {\n    \"self\": {\n        \"href\": \"/errors?request_id=2eb6aceb-731c-45f9-8427-41d6087c0983\"\n    },\n    \"next\": {\n        \"href\": \"/errors?request_id=2eb6aceb-731c-45f9-8427-41d6087c0983&page=2\"\n    }\n},\n```\n\nThe `href` attribute under the `_links.next` attribute in the response body contains a relative URL for the next batch. When the `next` attribute is missing, there are no more batches available *at present*. However, asynchronicity means that there can be new items available in the next moment.\n\nIf there are no errors that meet the given query, the response is `200 OK` with empty `data` array.\n\n## Disaster recovery\nDisaster recovery (DR) is an organization\u2019s ability to restore access and functionality to IT infrastructure after a disastrous event. These can range from natural disasters to human errors.\n\nRELEX Data API uses active/hot-standby approach with a DNS-based traffic load balancer.\n\n#### Hot-standby approach \nOur approach involves two environments located in different geographical regions. Traffic is directed to a primary environment while the other is reserved for disaster recovery purposes. It utilises an active/hot-standby configuration, meaning that only one region is actively used to direct user traffic, while the other region remains ready but mostly inactive.\n\n#### DNS-based traffic load balancer\nDuring normal operations the load balancer routes the incoming traffic to the primary environment. In the event of a disaster the load balancer switches to the hot-standby environment. \n\n#### Client considerations\nIn order to have a fast and optimal recovery from a disaster, it is crucial for clients to respect the ttl (time-to-live) sent by the DNS server. If the client caches the records too long, it can generate a long delay in the detection of the failover initiated by the load balancer. It is recommended to read through documentation for the programming language and the libraries that are used to access RELEX Data API to ensure expected behaviour.\n\nThe failover to secondary environment can take up to two minutes to avoid any unnecessary region switch-overs. If the disaster is generating failing requests (non-2xx status code returned), the clients must be ready to retry the failing requests as mentioned in `Data processing and asynchronicity section`\n\n#### Disaster Recovery Testing\nRELEX reserves the right to perform basic disaster recovery testing when necessary (approximately once a year). This is done to ensure that the best possible service is provided even during a disaster. These operations are designed not generate any traffic outage for clients, but there is a small risk due to the nature of the tests. Customers are always informed in advance before any DR practice takes place.\n\n#### Disaster recovery for outbound endpoints\nThe same level of recovery existing for inbound will be reflected to outbound too, but due to the endpoints to be at the time of writing under active implementation, the DR actions might not work as expected.\n\n# Authentication and security\n\nThis section describes the authentication methods and security-related requirements for the RELEX Data API.\n\n## Authentication\n\nThe RELEX Data API utilizes Oauth 2.0 and [OpenID Connect](http://openid.net/connect/) (OIDC) for authentication and authorization.\nOIDC is an authentication layer on top of [OAuth 2.0\u200b](https://oauth.net/2/) and [JSON Web Tokens](https://tools.ietf.org/html/rfc7519) (JWT).\n\nThe API is secured via a JWT access token, which must be present in each request.\nThe JWT is fetched from a [token endpoint](https://tools.ietf.org/html/rfc6749#section-3.2) of RELEX Identity (an Identity Provider) using a Client ID and a Client Secret.\n\n<!-- ReDoc-Inject: <security-definitions> -->\n### Authorization steps\n\nThe RELEX Data API implements authorization using Client Credentials Grant.\nIt is an authorization flow defined in the [OAuth 2.0 specification](https://tools.ietf.org/html/rfc6749#section-4.4),\nwhich is typically used for allowing access to resources in an automated context; that is, in a context with no human input.\n\nThe general steps involved are as follows:\n\n1. **Pre-requisites**: Getting the information the client needs to request an access token,\nand configuring them to the client application.\nThis is a one-time step.\n2. **Authorization**:\nThe client application requests an Access Token from RELEX Identity using the information provided in step 1.\n3. **Access**:\nThe client includes the provided Access Token in its requests, which allows it to access the RELEX Data API endpoints.\n\n#### Pre-requisites\n\nTo authenticate with RELEX Identity, the client needs:\n\n* A Client ID\n* A Client Secret\n* A RELEX Identity token endpoint URL\n\nThese are provided by RELEX during the implementation process.\nAfter this information has been provided, it needs to be configured into the client application according to the application's specific needs.\n\n#### Authorization: Acquiring an Access Token from RELEX Identity\n\n1. The client sends a POST request to the provided RELEX Identity token endpoint\n    * Content type needs to be set to `application/x-www-form-urlencoded`\n    * The Client ID, Client Secret, and `client_credentials` grant type must be included in the POST body as URL-encoded key-value pairs.\n    An example body:\n    `client_id=my_client&client_secret=ZWFzdGVyZWdnCg&grant_type=client_credentials`\n2. RELEX Identity authenticates the client.\n3. If authentication is successful,\nRELEX Identity authorizes the client by responding with a JSON object that contains:\n    * `\"access_token\"`: the JWT token that needs to be used for accessing the RELEX Data API\n    * `\"expires_in\"`: the access token's time to live in seconds\n    * `\"token_type\"`: information of how the token needs to be used, in this case, always set to \"Bearer\".\n    * `\"scope\"`: The scope that a token grants access to.\n\n#### Accessing the RELEX Data API with tokens\n\nWhenever the client accesses any RELEX Data API endpoint, the client must provide the following:\n\n* A valid access token in an `Authorization` -header, preceded by `Bearer`. An example header is `Authorization: Bearer eyJ[...]jw`.\n\n### Access token expiry\n\nWhen an Access Token expires, RELEX Data API calls respond with `401 Unauthorized`\nThe client application has two options to keep it authenticated:\n\n* The client may handle 401 responses and react by initiating a new Client Credentials grant, as described in the \"Authorization steps\" section.\n* The client may monitor the token's expiry interval. When the grant is about to expire, the client fetches a new token.\n\n**Note** The Client Credentials grant type is not compatible with a construct such as refresh tokens, as mentioned in the protocol [specification](https://tools.ietf.org/html/rfc6749#section-4.4.3).\n\n### An example authorization flow\n\n#### Client configuration\n\nIn our example flow, we have the following client-specific information:\n\n* Client ID: `hello-world`\n* Client Secret: `ZWFzdGVyZWdnCg`\n* Token endpoint URL: `https://identity.prod-eu.prod.cc.relexsolutions.com/login/restapi_uat/connect/token`\n\n For demonstration purposes, we'll use `curl` as a client.\n\n#### Authorization\n\n1. We POST our authorization request to the token endpoint.\n\n```bash\n% curl --location 'https://identity.prod-eu.prod.cc.relexsolutions.com/login/restapi_uat/connect/token' \\\n--header 'Content-Type: application/x-www-form-urlencoded' \\\n--data-urlencode 'grant_type=client_credentials' \\\n--data-urlencode 'client_id=hello-world' \\\n--data-urlencode 'client_secret=ZWFzdGVyZWdnCg'\n[...]\n> POST /login/restapi_uat/connect/token HTTP/1.1\n> Host: identity.prod-eu.prod.cc.relexsolutions.com\n> Accept: */*\n> Content-Type: application/x-www-form-urlencoded\n[...]\n< HTTP/1.1 200 OK\n< Content-Type: application/json; charset=UTF-8\n[...]\n```\n\nAs a response body, we get the following:\n\n```bash\n{\"access_token\":\"eyJ[...]jw\",\"expires_in\":3600,\"token_type\":\"Bearer\",\"scope\":\"example-scope\"}\n```\n\n2. We extract the access token from the response field of the `\"access_token\"`.\n3. We use this token to access an API resource. In our case `/data/master/locations`:\n\n```bash\n% curl -vd \"{ data: [...location objects...] }\" -H \"Content-Type: application/json\" -H \"Authorization: Bearer eyJ[...]jw\" https://eu.rest.relexsolutions.com/example-customer/data/master/locations\n> POST /example-customer/data/master/locations HTTP/1.1\n> Host: eu.rest.relexsolutions.com\n> Content-Type: application/json\n> Authorization: Bearer eyJ[...]jw\n[...]\n< HTTP/1.1 202 Accepted\n[...]\n```\n\n## IP allowlists\n\nAs an additional layer of security, the RELEX Data API can be configured to allow requests from only certain IP addresses or ranges. The recommendation is to always have an IP allowlist in place.\n\nThe API does not support an explicit blocklist.\n\n# Webhooks\n\nWebhooks provide a push based way to get information about certain system events,\ne. g. about available data.\n\nAt the core webhooks are a `POST` request to a client-provided endpoint\nin contrast to polling the service endpoints with `GET` method.\n\nThe way to indicate that a webhook has been processed successfully is by returning\na 2xx (status code 200-299) response to the webhook message within a reasonable time-frame (15s).\nIf the endpoint does not respond in 15s then the retries will occur\naccording to a predefined schedule (see the \"Retry mechanism\" section).\n\nIt's also important to disable **CSRF** protection for this endpoint\nsince **CSRF** only works in client initiated requests\nand webhooks are by design initiated by the server.\n\nAnother important aspect of handling webhooks is to verify the signature and timestamp when processing them.\nYou can learn more about it in the why \"Verifying signature\" section.\n\n> \u2139\ufe0f Only the `metadata` is sent to the endpoint.\n> To get the actual `data` subsequent request to the `rest-api` should be executed.\n\n## Retry mechanism\n\nWebhooks that did not get a 2xx response are retried according to an exponential backoff strategy as follows:\n\n- immediately\n- 5 seconds\n- 5 minutes\n- 30 minutes\n- 2 hours\n- 5 hours\n- 10 hours\n- 10 hours (in addition to the previous)\n\nFor example, an attempt that fails three times before eventually succeeding will be delivered\nroughly 35 minutes and 5 seconds following the first attempt.\n\n## Verifying signature\n\n> \u2139\ufe0f The verification process could be omitted while developing and testing\n> but the general advise is to implement validation from the start.\n>\n> The reasons to verify incoming webhooks explained in this article by Svix - our webhook service provider:\n>\n> [Why Verify Webhooks (docs.svix.com)](https://docs.svix.com/receiving/verifying-payloads/why)\n\nTo ensure the authenticity of incoming webhook the signature should be verified.\n\nType of the signature is [HMAC](https://en.wikipedia.org/wiki/HMAC)\nwhere [SHA-256](https://en.wikipedia.org/wiki/SHA-2) used as a hash function.\n\nEvery webhook contains following headers:\n\n- `SVIX-ID` - the unique message identifier for the webhook message\n- `SVIX-TIMESTAMP` - timestamp in seconds since epoch\n- `SVIX-SIGNATURE` - the Base64 encoded list of signatures (space delimited)\n\nTo verify the webhook signature, use the **preferred method**:\n\n1. **Using the Svix SDK (Recommended)**  \n   The recommended approach is to use the Svix SDK, as detailed in the official documentation:  \n   [How to Verify Webhooks with the Svix Libraries](https://docs.svix.com/receiving/verifying-payloads/how).\n\n2. **Manual Verification (If SDK is Not an Option)**  \n   If using the SDK is not possible, the signature can be verified manually by following these steps:  \n   [Verifying Webhooks Manually](https://docs.svix.com/receiving/verifying-payloads/how-manual).\n\nThe verification process requires the webhook headers, the webhook body, and an encoding secret provided by RELEX.\n\n## Example\n\nHere is an example of a request body sent with a webhook:\n\n```json\n{\n  \"data\": [\n    {\n      \"id\": \"a123b456-c789-d012-e345-6789fghijk01\",\n      \"resource\": \"sales_forecasts\",\n      \"timestamp\": \"2024-04-03T07:15:22.567Z\",\n      \"url\": \"/data/transactions/sales_forecasts/a123b456-c789-d012-e345-6789fghijk01\"\n    },\n    {\n      \"id\": \"fefa31ba-ec6a-3f60-bdc2-3f10a6afc55f\",\n      \"resource\": \"sales_forecasts\",\n      \"timestamp\": \"2024-04-03T08:20:39.123Z\",\n      \"url\": \"/data/transactions/sales_forecasts/fefa31ba-ec6a-3f60-bdc2-3f10a6afc55f\"\n    }\n  ],\n  \"meta\": {\n    \"created_at\": \"2024-04-03T09:10:19.821Z\",\n    \"type\": \"data.transactions.notify\"\n  }\n}\n```\n\nwhere:\n\n`data` (array of resources): Each object represents an available data resource.\n\n- `id` \u2192 Unique identifier for the resource.  \n- `resource` \u2192 Resource name (e.g., `sales_forecasts`).  \n- `timestamp` \u2192 When the data was made available (ISO 8601 format).  \n- `url` \u2192 Relative path to the resource.\n\n`meta` (Webhook Metadata): Provides context for the webhook event.\n\n- `created_at` \u2192 When the webhook message was created.  \n- `type` \u2192 Type of event in the format `data.<namespace>.notify`. The `<namespace>` is related to the resource category and can be, for example, `custom`.\n\n## Firewall configuration for webhook delivery\n\nWebhooks from RELEX are delivered through Svix, which operates using a predefined set of static IP address ranges. If your webhook receiving endpoint is protected by a firewall or subject to network-level filtering, ensure that traffic from RELEX\u2019s webhook delivery service is explicitly allowed.\n\nThe up-to-date list of source IPs used by Svix is maintained at the following location:\n\nhttps://docs.svix.com/receiving/source-ips",
    "title": "RELEX Data API for Example Customer",
    "contact": {
      "email": "support@relexsolutions.com"
    },
    "license": {
      "name": "Apache 2.0",
      "url": "http://www.apache.org/licenses/LICENSE-2.0.html"
    },
    "x-logo": {
      "url": "assets/logo.png",
      "backgroundColor": "#FFFFFF",
      "altText": "RELEX Logo"
    }
  },
  "servers": [
    {
      "url": "https://uat-eu.rest.relexsolutions.com/restapi-test"
    },
    {
      "url": "https://eu.rest.relexsolutions.com/restapi-test"
    }
  ],
  "security": [
    {
      "OAuth2": []
    }
  ],
  "tags": [
    {
      "name": "Customizations",
      "description": "### Customer specific additions\nThere are currently no customer specific additions"
    },
    {
      "name": "Metadata",
      "description": "The namespace for metadata contains the different endpoints for API metadata."
    },
    {
      "name": "Master data",
      "description": "The namespace for master data contains the different endpoints for transferring master data."
    },
    {
      "name": "Transactions",
      "description": "The namespace for transaction data contains the different endpoints for inventory transactions, balance and open order information."
    },
    {
      "name": "Custom",
      "description": "The namespace for custom data contains data that does not conform to the RELEX Data API standard dimensions."
    }
  ],
  "paths": {
    "/meta/version": {
      "get": {
        "tags": [
          "Metadata"
        ],
        "summary": "Version",
        "description": "HTTP GET handler for version endpoint",
        "operationId": "GetVersion",
        "parameters": [
          {
            "$ref": "#/components/parameters/HttpHeader"
          }
        ],
        "responses": {
          "200": {
            "description": "Accepted",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/version"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "413": {
            "$ref": "#/components/responses/Problem413Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      }
    },
    "/meta/errors": {
      "get": {
        "tags": [
          "Metadata"
        ],
        "summary": "Errors",
        "description": "HTTP GET handler for errors endpoint",
        "operationId": "GetErrors",
        "parameters": [
          {
            "$ref": "#/components/parameters/request_id"
          },
          {
            "$ref": "#/components/parameters/start_timestamp"
          },
          {
            "$ref": "#/components/parameters/end_timestamp"
          },
          {
            "$ref": "#/components/parameters/page"
          },
          {
            "$ref": "#/components/parameters/per_page"
          },
          {
            "$ref": "#/components/parameters/HttpHeader"
          }
        ],
        "responses": {
          "200": {
            "description": "Accepted",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/errors"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "413": {
            "$ref": "#/components/responses/Problem413Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      }
    },
    "/meta/health": {
      "get": {
        "tags": [
          "Metadata"
        ],
        "summary": "Health",
        "description": "HTTP GET handler for health endpoint",
        "operationId": "GetHealth",
        "parameters": [
          {
            "$ref": "#/components/parameters/HttpHeader"
          }
        ],
        "responses": {
          "200": {
            "description": "Accepted",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/health"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "413": {
            "$ref": "#/components/responses/Problem413Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      }
    },
    "/data/transactions/adjustments": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/retail_adjustment_request_body"
              }
            }
          },
          "required": true
        },
        "tags": [
          "Transactions"
        ],
        "summary": "Adjustments",
        "description": "Inventory balance correction, similar to inventory check transaction.",
        "operationId": "PostAdjustments",
        "parameters": [
          {
            "$ref": "#/components/parameters/HttpHeader"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Accepted"
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "413": {
            "$ref": "#/components/responses/Problem413Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      }
    },
    "/data/transactions/balances": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/retail_balance_request_body"
              }
            }
          },
          "required": true
        },
        "tags": [
          "Transactions"
        ],
        "summary": "Balances",
        "description": "Current physical stock level.",
        "operationId": "PostBalances",
        "parameters": [
          {
            "$ref": "#/components/parameters/HttpHeader"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Accepted"
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "413": {
            "$ref": "#/components/responses/Problem413Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      }
    },
    "/data/transactions/batch_balances": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/retail_batch_balance_request_body"
              }
            }
          },
          "required": true
        },
        "tags": [
          "Transactions"
        ],
        "summary": "Batch Balances",
        "description": "Current physical stock divided to batches based on spoiling date.",
        "operationId": "PostBatchBalances",
        "parameters": [
          {
            "$ref": "#/components/parameters/HttpHeader"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Accepted"
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "413": {
            "$ref": "#/components/responses/Problem413Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      }
    },
    "/data/transactions/daily_sales": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/retail_daily_sale_request_body"
              }
            }
          },
          "required": true
        },
        "tags": [
          "Transactions"
        ],
        "summary": "Daily Sales",
        "description": "Daily aggregates of sales transactions. Alternative to Point-of-Sales (POS) data.",
        "operationId": "PostDailySales",
        "parameters": [
          {
            "$ref": "#/components/parameters/HttpHeader"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Accepted"
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "413": {
            "$ref": "#/components/responses/Problem413Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      }
    },
    "/data/transactions/dc_transactions": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/retail_dc_transaction_request_body"
              }
            }
          },
          "required": true
        },
        "tags": [
          "Transactions"
        ],
        "summary": "DC transactions",
        "description": "Transactions when separated for DC-locations",
        "operationId": "PostDcTransactions",
        "parameters": [
          {
            "$ref": "#/components/parameters/HttpHeader"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Accepted"
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "413": {
            "$ref": "#/components/responses/Problem413Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      }
    },
    "/data/transactions/deliveries": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/retail_delivery_request_body"
              }
            }
          },
          "required": true
        },
        "tags": [
          "Transactions"
        ],
        "summary": "Deliveries",
        "description": "Goods received into stock (or good returned to supplier -->reversal).",
        "operationId": "PostDeliveries",
        "parameters": [
          {
            "$ref": "#/components/parameters/HttpHeader"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Accepted"
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "413": {
            "$ref": "#/components/responses/Problem413Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      }
    },
    "/data/transactions/end_customer_transactions": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/retail_end_customer_transaction_request_body"
              }
            }
          },
          "required": true
        },
        "tags": [
          "Transactions"
        ],
        "summary": "End Customer Transactions",
        "description": "Maintenance of end customer transactions data.",
        "operationId": "PostEndCustomerTransactions",
        "parameters": [
          {
            "$ref": "#/components/parameters/HttpHeader"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Accepted"
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "413": {
            "$ref": "#/components/responses/Problem413Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      }
    },
    "/data/transactions/footfall_counts": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/retail_footfall_count_request_body"
              }
            }
          },
          "required": true
        },
        "tags": [
          "Transactions"
        ],
        "summary": "Footfalls",
        "description": "Information on footfall counts for stores",
        "operationId": "PostFootfallCounts",
        "parameters": [
          {
            "$ref": "#/components/parameters/HttpHeader"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Accepted"
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "413": {
            "$ref": "#/components/responses/Problem413Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      }
    },
    "/data/transactions/goods_received": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/retail_goods_received_request_body"
              }
            }
          },
          "required": true
        },
        "tags": [
          "Transactions"
        ],
        "summary": "Goods Received",
        "description": "Multi-transaction endpoint for received goods",
        "operationId": "PostGoodsReceived",
        "parameters": [
          {
            "$ref": "#/components/parameters/HttpHeader"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Accepted"
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "413": {
            "$ref": "#/components/responses/Problem413Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      }
    },
    "/data/transactions/inventory_checks": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/retail_inventory_check_request_body"
              }
            }
          },
          "required": true
        },
        "tags": [
          "Transactions"
        ],
        "summary": "Inventory Checks",
        "description": "Inventory balance correction based on inventory checking.",
        "operationId": "PostInventoryChecks",
        "parameters": [
          {
            "$ref": "#/components/parameters/HttpHeader"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Accepted"
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "413": {
            "$ref": "#/components/responses/Problem413Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      }
    },
    "/data/transactions/inventory_events": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/retail_inventory_event_request_body"
              }
            }
          },
          "required": true
        },
        "tags": [
          "Transactions"
        ],
        "summary": "Inventory Events",
        "description": "Multi-transaction endpoint for all transaction types. This endpoint requires the same keys for all transaction types.",
        "operationId": "PostInventoryEvents",
        "parameters": [
          {
            "$ref": "#/components/parameters/HttpHeader"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Accepted"
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "413": {
            "$ref": "#/components/responses/Problem413Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      }
    },
    "/data/transactions/lost_sales": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/retail_lost_sale_request_body"
              }
            }
          },
          "required": true
        },
        "tags": [
          "Transactions"
        ],
        "summary": "Lost Sales",
        "description": "Lost sale transactions.",
        "operationId": "PostLostSales",
        "parameters": [
          {
            "$ref": "#/components/parameters/HttpHeader"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Accepted"
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "413": {
            "$ref": "#/components/responses/Problem413Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      }
    },
    "/data/transactions/open_purchase_orders": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/retail_open_purchase_order_request_body"
              }
            }
          },
          "required": true
        },
        "tags": [
          "Transactions"
        ],
        "summary": "Open Purchase Orders",
        "description": "Open purchase orders, can be linked to DELIVERY with a reference number.",
        "operationId": "PostOpenPurchaseOrders",
        "parameters": [
          {
            "$ref": "#/components/parameters/HttpHeader"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Accepted"
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "413": {
            "$ref": "#/components/responses/Problem413Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      }
    },
    "/data/transactions/open_sales_orders": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/retail_open_sales_order_request_body"
              }
            }
          },
          "required": true
        },
        "tags": [
          "Transactions"
        ],
        "summary": "Open Sales Orders",
        "description": "Open sales orders, can be linked to SALE with a reference number.",
        "operationId": "PostOpenSalesOrders",
        "parameters": [
          {
            "$ref": "#/components/parameters/HttpHeader"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Accepted"
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "413": {
            "$ref": "#/components/responses/Problem413Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      }
    },
    "/data/transactions/orders": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/retail_order_request_body"
              }
            }
          },
          "required": true
        },
        "tags": [
          "Transactions"
        ],
        "summary": "Orders",
        "description": "This interface is alternative to Open purchase order- interface. With this interface each Purchase order row is created only once in RELEX.",
        "operationId": "PostOrders",
        "parameters": [
          {
            "$ref": "#/components/parameters/HttpHeader"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Accepted"
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "413": {
            "$ref": "#/components/responses/Problem413Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      }
    },
    "/data/transactions/sales": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/retail_sale_request_body"
              }
            }
          },
          "required": true
        },
        "tags": [
          "Transactions"
        ],
        "summary": "Sales",
        "description": "Goods sold from stock (or customer returned the goods --> reversal), required for calculating forecast.",
        "operationId": "PostSales",
        "parameters": [
          {
            "$ref": "#/components/parameters/HttpHeader"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Accepted"
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "413": {
            "$ref": "#/components/responses/Problem413Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      }
    },
    "/data/transactions/special_deliveries": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/retail_special_delivery_request_body"
              }
            }
          },
          "required": true
        },
        "tags": [
          "Transactions"
        ],
        "summary": "Special Deliveries",
        "description": "Used to separate fast, special deliveries from normal deliveries.",
        "operationId": "PostSpecialDeliveries",
        "parameters": [
          {
            "$ref": "#/components/parameters/HttpHeader"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Accepted"
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "413": {
            "$ref": "#/components/responses/Problem413Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      }
    },
    "/data/transactions/spoilages": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/retail_spoilage_request_body"
              }
            }
          },
          "required": true
        },
        "tags": [
          "Transactions"
        ],
        "summary": "Spoilages",
        "description": "Scrapped or spoiled from inventory, most relevant with fresh products.",
        "operationId": "PostSpoilages",
        "parameters": [
          {
            "$ref": "#/components/parameters/HttpHeader"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Accepted"
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "413": {
            "$ref": "#/components/responses/Problem413Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      }
    },
    "/data/transactions/transfers": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/retail_transfer_request_body"
              }
            }
          },
          "required": true
        },
        "tags": [
          "Transactions"
        ],
        "summary": "Transfers",
        "description": "Stock transfer from one inventory location to another.",
        "operationId": "PostTransfers",
        "parameters": [
          {
            "$ref": "#/components/parameters/HttpHeader"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Accepted"
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "413": {
            "$ref": "#/components/responses/Problem413Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      }
    },
    "/data/master/assortments": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/retail_assortment_request_body"
              }
            }
          },
          "required": true
        },
        "tags": [
          "Master data"
        ],
        "summary": "Assortments",
        "description": "Product list for building planograms.",
        "operationId": "PostAssortments",
        "parameters": [
          {
            "$ref": "#/components/parameters/HttpHeader"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Accepted"
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "413": {
            "$ref": "#/components/responses/Problem413Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      }
    },
    "/data/master/barcodes": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/retail_barcode_request_body"
              }
            }
          },
          "required": true
        },
        "tags": [
          "Master data"
        ],
        "summary": "Barcodes",
        "description": "Maintenance of EANs.",
        "operationId": "PostBarcodes",
        "parameters": [
          {
            "$ref": "#/components/parameters/HttpHeader"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Accepted"
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "413": {
            "$ref": "#/components/responses/Problem413Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      }
    },
    "/data/master/bills_of_materials": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/retail_bill_of_materials_request_body"
              }
            }
          },
          "required": true
        },
        "tags": [
          "Master data"
        ],
        "summary": "Bill of materials",
        "description": "Information on bill-of-material -products.",
        "operationId": "PostBillsOfMaterials",
        "parameters": [
          {
            "$ref": "#/components/parameters/HttpHeader"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Accepted"
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "413": {
            "$ref": "#/components/responses/Problem413Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      }
    },
    "/data/master/brackets": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/retail_bracket_request_body"
              }
            }
          },
          "required": true
        },
        "tags": [
          "Master data"
        ],
        "summary": "Brackets",
        "description": "Automated maintenance of brackets for coordination groups or supplier-locations.",
        "operationId": "PostBrackets",
        "parameters": [
          {
            "$ref": "#/components/parameters/HttpHeader"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Accepted"
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "413": {
            "$ref": "#/components/responses/Problem413Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      }
    },
    "/data/master/campaigns": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/retail_campaign_request_body"
              }
            }
          },
          "required": true
        },
        "tags": [
          "Master data"
        ],
        "summary": "Campaigns",
        "description": "Campaign master data that describes the high-level information of campaigns.",
        "operationId": "PostCampaigns",
        "parameters": [
          {
            "$ref": "#/components/parameters/HttpHeader"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Accepted"
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "413": {
            "$ref": "#/components/responses/Problem413Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      },
      "delete": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/retail_delete_campaign_request_body"
              }
            }
          },
          "required": true
        },
        "tags": [
          "Master data"
        ],
        "summary": "Campaigns",
        "description": "Delete one or more campaign records. Each campaign is uniquely identified by the `code` attribute",
        "operationId": "DeleteCampaigns",
        "parameters": [
          {
            "$ref": "#/components/parameters/HttpHeader"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Accepted"
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "413": {
            "$ref": "#/components/responses/Problem413Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      }
    },
    "/data/master/chains": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/retail_chain_request_body"
              }
            }
          },
          "required": true
        },
        "tags": [
          "Master data"
        ],
        "summary": "Chains",
        "description": "Chain data for locations, can be used to group locations under chains.",
        "operationId": "PostChains",
        "parameters": [
          {
            "$ref": "#/components/parameters/HttpHeader"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Accepted"
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "413": {
            "$ref": "#/components/responses/Problem413Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      }
    },
    "/data/master/clusters": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/retail_cluster_request_body"
              }
            }
          },
          "required": true
        },
        "tags": [
          "Master data"
        ],
        "summary": "Clusters",
        "description": "Cluster data useful in planogram assignments and calculating product performance.",
        "operationId": "PostClusters",
        "parameters": [
          {
            "$ref": "#/components/parameters/HttpHeader"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Accepted"
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "413": {
            "$ref": "#/components/responses/Problem413Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      }
    },
    "/data/master/cluster_groups": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/retail_cluster_group_request_body"
              }
            }
          },
          "required": true
        },
        "tags": [
          "Master data"
        ],
        "summary": "Cluster Groups",
        "description": "Cluster group data useful in planogram assignments and calculating product performance.",
        "operationId": "PostClusterGroups",
        "parameters": [
          {
            "$ref": "#/components/parameters/HttpHeader"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Accepted"
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "413": {
            "$ref": "#/components/responses/Problem413Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      }
    },
    "/data/master/cluster_group_clusters": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/retail_cluster_group_cluster_request_body"
              }
            }
          },
          "required": true
        },
        "tags": [
          "Master data"
        ],
        "summary": "Cluster Group Clusters",
        "description": "Cluster group cluster data useful in planogram assignments and calculating product performance.",
        "operationId": "PostClusterGroupClusters",
        "parameters": [
          {
            "$ref": "#/components/parameters/HttpHeader"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Accepted"
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "413": {
            "$ref": "#/components/responses/Problem413Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      }
    },
    "/data/master/closed_dates": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/retail_closed_date_request_body"
              }
            }
          },
          "required": true
        },
        "tags": [
          "Master data"
        ],
        "summary": "Closed Dates",
        "description": "Closed dates for forecasting, ordering, or delivery of stores.",
        "operationId": "PostClosedDates",
        "parameters": [
          {
            "$ref": "#/components/parameters/HttpHeader"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Accepted"
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "413": {
            "$ref": "#/components/responses/Problem413Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      }
    },
    "/data/master/opening_times": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/retail_opening_time_request_body"
              }
            }
          },
          "required": true
        },
        "tags": [
          "Master data"
        ],
        "summary": "Opening Times",
        "description": "Used to maintain store opening time.",
        "operationId": "PostOpeningTimes",
        "parameters": [
          {
            "$ref": "#/components/parameters/HttpHeader"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Accepted"
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "413": {
            "$ref": "#/components/responses/Problem413Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      }
    },
    "/data/master/constraint_groups": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/retail_constraint_group_request_body"
              }
            }
          },
          "required": true
        },
        "tags": [
          "Master data"
        ],
        "summary": "Constraint Groups",
        "description": "Automated maintenance of constraint groups.",
        "operationId": "PostConstraintGroups",
        "parameters": [
          {
            "$ref": "#/components/parameters/HttpHeader"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Accepted"
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "413": {
            "$ref": "#/components/responses/Problem413Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      }
    },
    "/data/master/constraint_group_constraints": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/retail_constraint_group_constraint_request_body"
              }
            }
          },
          "required": true
        },
        "tags": [
          "Master data"
        ],
        "summary": "Constraint Group Constraints",
        "description": "Automated maintenance of date-specific constraints.",
        "operationId": "PostConstraintGroupConstraints",
        "parameters": [
          {
            "$ref": "#/components/parameters/HttpHeader"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Accepted"
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "413": {
            "$ref": "#/components/responses/Problem413Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      }
    },
    "/data/master/coordination_group_brackets": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/retail_coordination_group_bracket_request_body"
              }
            }
          },
          "required": true
        },
        "tags": [
          "Master data"
        ],
        "summary": "Coordination Group Brackets",
        "description": "To link brackets to supplier-locations.",
        "operationId": "PostCoordinationGroupBrackets",
        "parameters": [
          {
            "$ref": "#/components/parameters/HttpHeader"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Accepted"
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "413": {
            "$ref": "#/components/responses/Problem413Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      }
    },
    "/data/master/coordination_groups": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/retail_coordination_group_request_body"
              }
            }
          },
          "required": true
        },
        "tags": [
          "Master data"
        ],
        "summary": "Coordination Groups",
        "description": "Groups for coordinated ordering if the coordination is done on other groupings than supplier-location level.",
        "operationId": "PostCoordinationGroups",
        "parameters": [
          {
            "$ref": "#/components/parameters/HttpHeader"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Accepted"
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "413": {
            "$ref": "#/components/responses/Problem413Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      }
    },
    "/data/master/countries": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/retail_country_request_body"
              }
            }
          },
          "required": true
        },
        "tags": [
          "Master data"
        ],
        "summary": "Countries",
        "description": "Country data to group chains under countries.",
        "operationId": "PostCountries",
        "parameters": [
          {
            "$ref": "#/components/parameters/HttpHeader"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Accepted"
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "413": {
            "$ref": "#/components/responses/Problem413Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      }
    },
    "/data/master/date_specific_deliveries": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/retail_date_specific_delivery_request_body"
              }
            }
          },
          "required": true
        },
        "tags": [
          "Master data"
        ],
        "summary": "Date Specific Deliveries",
        "description": "Date-specific deliveries for product-locations, can be connected to delivery schedules to derive information.",
        "operationId": "PostDateSpecificDeliveries",
        "parameters": [
          {
            "$ref": "#/components/parameters/HttpHeader"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Accepted"
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "413": {
            "$ref": "#/components/responses/Problem413Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      }
    },
    "/data/master/delivery_schedules": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/retail_delivery_schedule_request_body"
              }
            }
          },
          "required": true
        },
        "tags": [
          "Master data"
        ],
        "summary": "Delivery Schedules",
        "description": "Delivery schedule data as their own data set.",
        "operationId": "PostDeliverySchedules",
        "parameters": [
          {
            "$ref": "#/components/parameters/HttpHeader"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Accepted"
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "413": {
            "$ref": "#/components/responses/Problem413Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      }
    },
    "/data/master/end_customers": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/retail_end_customer_request_body"
              }
            }
          },
          "required": true
        },
        "tags": [
          "Master data"
        ],
        "summary": "End Customers",
        "description": "Maintenance of end customer data.",
        "operationId": "PostEndCustomers",
        "parameters": [
          {
            "$ref": "#/components/parameters/HttpHeader"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Accepted"
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "413": {
            "$ref": "#/components/responses/Problem413Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      }
    },
    "/data/master/floor_plans": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/retail_floor_plan_request_body"
              }
            }
          },
          "required": true
        },
        "tags": [
          "Master data"
        ],
        "summary": "Floor Plans",
        "description": "Maintenance of floor plans.",
        "operationId": "PostFloorPlans",
        "parameters": [
          {
            "$ref": "#/components/parameters/HttpHeader"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Accepted"
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "413": {
            "$ref": "#/components/responses/Problem413Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      }
    },
    "/data/master/locations": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/retail_location_request_body"
              }
            }
          },
          "required": true
        },
        "tags": [
          "Master data"
        ],
        "summary": "Locations",
        "description": "Location master data for locations.",
        "operationId": "PostLocations",
        "parameters": [
          {
            "$ref": "#/components/parameters/HttpHeader"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Accepted"
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "413": {
            "$ref": "#/components/responses/Problem413Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      }
    },
    "/data/master/location_category_cluster_group_clusters": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/retail_location_category_cluster_group_cluster_request_body"
              }
            }
          },
          "required": true
        },
        "tags": [
          "Master data"
        ],
        "summary": "Location Category Cluster Group Clusters",
        "description": "Maintenace of location category cluster group cluster data. This endpoint is in development and not yet supported.",
        "operationId": "PostLocationCategoryClusterGroupClusters",
        "parameters": [
          {
            "$ref": "#/components/parameters/HttpHeader"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Accepted"
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "413": {
            "$ref": "#/components/responses/Problem413Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      }
    },
    "/data/master/location_category_spaces": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/retail_location_category_space_request_body"
              }
            }
          },
          "required": true
        },
        "tags": [
          "Master data"
        ],
        "summary": "Location Category Spaces",
        "description": "Maintenace of location category space data. This endpoint is in development and not yet supported.",
        "operationId": "PostLocationCategorySpaces",
        "parameters": [
          {
            "$ref": "#/components/parameters/HttpHeader"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Accepted"
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "413": {
            "$ref": "#/components/responses/Problem413Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      }
    },
    "/data/master/location_category_space_bays": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/retail_location_category_space_bay_request_body"
              }
            }
          },
          "required": true
        },
        "tags": [
          "Master data"
        ],
        "summary": "Location Category Space Bays",
        "description": "Maintenace of location category space bay data. This endpoint is in development and not yet supported.",
        "operationId": "PostLocationCategorySpaceBays",
        "parameters": [
          {
            "$ref": "#/components/parameters/HttpHeader"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Accepted"
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "413": {
            "$ref": "#/components/responses/Problem413Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      }
    },
    "/data/master/location_category_space_bay_components": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/retail_location_category_space_bay_component_request_body"
              }
            }
          },
          "required": true
        },
        "tags": [
          "Master data"
        ],
        "summary": "Location Category Space Bay Components",
        "description": "Maintenace of location category space bay component data. This endpoint is in development and not yet supported.",
        "operationId": "PostLocationCategorySpaceBayComponents",
        "parameters": [
          {
            "$ref": "#/components/parameters/HttpHeader"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Accepted"
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "413": {
            "$ref": "#/components/responses/Problem413Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      }
    },
    "/data/master/merchandising_product_groups": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/retail_merchandising_product_group_request_body"
              }
            }
          },
          "required": true
        },
        "tags": [
          "Master data"
        ],
        "summary": "Merchandising Product Groups",
        "description": "Merchandising product group data for products, the deepest level of merchandising product group hierarchy needs to be agreed with RELEX.",
        "operationId": "PostMerchandisingProductGroups",
        "parameters": [
          {
            "$ref": "#/components/parameters/HttpHeader"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Accepted"
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "413": {
            "$ref": "#/components/responses/Problem413Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      }
    },
    "/data/master/supplier_location_brackets": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/retail_supplier_location_bracket_request_body"
              }
            }
          },
          "required": true
        },
        "tags": [
          "Master data"
        ],
        "summary": "Supplier Location Brackets",
        "description": "To link brackets to supplier-locations.",
        "operationId": "PostSupplierLocationBrackets",
        "parameters": [
          {
            "$ref": "#/components/parameters/HttpHeader"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Accepted"
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "413": {
            "$ref": "#/components/responses/Problem413Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      }
    },
    "/data/master/location_supplier_delivery_schedules": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/retail_location_supplier_delivery_schedule_request_body"
              }
            }
          },
          "required": true
        },
        "tags": [
          "Master data"
        ],
        "summary": "Location Supplier Delivery Schedules",
        "description": "Location-supplier delivery schedules, used to connect individual location-suppliers to delivery schedules according to codes.",
        "operationId": "PostLocationSupplierDeliverySchedules",
        "parameters": [
          {
            "$ref": "#/components/parameters/HttpHeader"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Accepted"
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "413": {
            "$ref": "#/components/responses/Problem413Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      },
      "delete": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/retail_delete_location_supplier_delivery_schedule_request_body"
              }
            }
          },
          "required": true
        },
        "tags": [
          "Master data"
        ],
        "summary": "Location Supplier Delivery Schedules",
        "description": "Delete one or more Location-supplier delivery schedule records. Each record is uniquely identified by the `delivery_schedule`, `location` and `supplier` attributes",
        "operationId": "DeleteLocationSupplierDeliverySchedules",
        "parameters": [
          {
            "$ref": "#/components/parameters/HttpHeader"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Accepted"
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "413": {
            "$ref": "#/components/responses/Problem413Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      }
    },
    "/data/master/supplier_locations": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/retail_supplier_location_request_body"
              }
            }
          },
          "required": true
        },
        "tags": [
          "Master data"
        ],
        "summary": "Supplier Locations",
        "description": "Location supplier data for location specific supplier information.",
        "operationId": "PostSupplierLocations",
        "parameters": [
          {
            "$ref": "#/components/parameters/HttpHeader"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Accepted"
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "413": {
            "$ref": "#/components/responses/Problem413Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      }
    },
    "/data/master/supplier_location_closures": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/retail_supplier_location_closure_request_body"
              }
            }
          },
          "required": true
        },
        "tags": [
          "Master data"
        ],
        "summary": "Supplier Location Closures",
        "description": "Date-specific closure data for suppliers.",
        "operationId": "PostSupplierLocationClosures",
        "parameters": [
          {
            "$ref": "#/components/parameters/HttpHeader"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Accepted"
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "413": {
            "$ref": "#/components/responses/Problem413Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      }
    },
    "/data/master/pre_pack_variants": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/retail_pre_pack_variant_request_body"
              }
            }
          },
          "required": true
        },
        "tags": [
          "Master data"
        ],
        "summary": "Pre Pack Variants",
        "description": "Maintenance of prepack variants.",
        "operationId": "PostPrePackVariants",
        "parameters": [
          {
            "$ref": "#/components/parameters/HttpHeader"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Accepted"
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "413": {
            "$ref": "#/components/responses/Problem413Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      },
      "delete": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/retail_delete_pre_pack_variant_request_body"
              }
            }
          },
          "required": true
        },
        "tags": [
          "Master data"
        ],
        "summary": "Pre Pack Variants",
        "description": "Delete one or more prepack variants. Each record is uniquely identified by the `pre_pack_product_code` and `variant_product_code` attributes",
        "operationId": "DeletePrePackVariants",
        "parameters": [
          {
            "$ref": "#/components/parameters/HttpHeader"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Accepted"
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "413": {
            "$ref": "#/components/responses/Problem413Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      }
    },
    "/data/master/price_calendars": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/retail_price_calendar_request_body"
              }
            }
          },
          "required": true
        },
        "tags": [
          "Master data"
        ],
        "summary": "Price Calendars",
        "description": "Demand AI forecasting to define pricing effect to sales, but also useful for reporting purposes.",
        "operationId": "PostPriceCalendars",
        "parameters": [
          {
            "$ref": "#/components/parameters/HttpHeader"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Accepted"
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "413": {
            "$ref": "#/components/responses/Problem413Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      }
    },
    "/data/master/batch_sizes": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/retail_batch_size_request_body"
              }
            }
          },
          "required": true
        },
        "tags": [
          "Master data"
        ],
        "summary": "Batch Sizes",
        "description": "Batch sizes.",
        "operationId": "PostBatchSizes",
        "parameters": [
          {
            "$ref": "#/components/parameters/HttpHeader"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Accepted"
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "413": {
            "$ref": "#/components/responses/Problem413Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      },
      "delete": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/retail_delete_batch_size_request_body"
              }
            }
          },
          "required": true
        },
        "tags": [
          "Master data"
        ],
        "summary": "Batch Sizes",
        "description": "Delete one or more batch sizes records. Each record is uniquely identified by the `code` and `product` attributes",
        "operationId": "DeleteBatchSizes",
        "parameters": [
          {
            "$ref": "#/components/parameters/HttpHeader"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Accepted"
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "413": {
            "$ref": "#/components/responses/Problem413Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      }
    },
    "/data/master/product_end_customers": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/retail_product_end_customer_request_body"
              }
            }
          },
          "required": true
        },
        "tags": [
          "Master data"
        ],
        "summary": "Product End Customers",
        "description": "Maintenance of product-end customer data.",
        "operationId": "PostProductEndCustomers",
        "parameters": [
          {
            "$ref": "#/components/parameters/HttpHeader"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Accepted"
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "413": {
            "$ref": "#/components/responses/Problem413Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      }
    },
    "/data/master/product_classes": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/retail_product_class_request_body"
              }
            }
          },
          "required": true
        },
        "tags": [
          "Master data"
        ],
        "summary": "Product classes",
        "description": "Product class data to classify products under classes.",
        "operationId": "PostProductClasses",
        "parameters": [
          {
            "$ref": "#/components/parameters/HttpHeader"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Accepted"
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "413": {
            "$ref": "#/components/responses/Problem413Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      }
    },
    "/data/master/product_groups": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/retail_product_group_request_body"
              }
            }
          },
          "required": true
        },
        "tags": [
          "Master data"
        ],
        "summary": "Product Groups",
        "description": "Product group data for products, the deepest level of group hierarchy needs to be agreed with RELEX.",
        "operationId": "PostProductGroups",
        "parameters": [
          {
            "$ref": "#/components/parameters/HttpHeader"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Accepted"
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "413": {
            "$ref": "#/components/responses/Problem413Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      }
    },
    "/data/master/product_location_batch_sizes": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/retail_product_location_batch_size_request_body"
              }
            }
          },
          "required": true
        },
        "tags": [
          "Master data"
        ],
        "summary": "Product Location Batch Sizes",
        "description": "Product-location batch sizes.",
        "operationId": "PostProductLocationBatchSizes",
        "parameters": [
          {
            "$ref": "#/components/parameters/HttpHeader"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Accepted"
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "413": {
            "$ref": "#/components/responses/Problem413Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      },
      "delete": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/retail_delete_product_location_batch_size_request_body"
              }
            }
          },
          "required": true
        },
        "tags": [
          "Master data"
        ],
        "summary": "Product Location Batch Sizes",
        "description": "Delete one or more Product-location batch size records. Each record is uniquely identified by the `product_batch_size`, `product` and `location` attributes",
        "operationId": "DeleteProductLocationBatchSizes",
        "parameters": [
          {
            "$ref": "#/components/parameters/HttpHeader"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Accepted"
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "413": {
            "$ref": "#/components/responses/Problem413Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      }
    },
    "/data/master/product_location_campaigns": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/retail_product_location_campaign_request_body"
              }
            }
          },
          "required": true
        },
        "tags": [
          "Master data"
        ],
        "summary": "Product Location Campaigns",
        "description": "Product-location-campaign data for detailed campaign information per product-location.",
        "operationId": "PostProductLocationCampaigns",
        "parameters": [
          {
            "$ref": "#/components/parameters/HttpHeader"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Accepted"
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "413": {
            "$ref": "#/components/responses/Problem413Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      },
      "delete": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/retail_delete_product_location_campaign_request_body"
              }
            }
          },
          "required": true
        },
        "tags": [
          "Master data"
        ],
        "summary": "Product Location Campaigns",
        "description": "Delete one or more product-location-campaign records. Each record is uniquely identified by the `product`, `location` and `campaign` attributes",
        "operationId": "DeleteProductLocationCampaigns",
        "parameters": [
          {
            "$ref": "#/components/parameters/HttpHeader"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Accepted"
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "413": {
            "$ref": "#/components/responses/Problem413Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      }
    },
    "/data/master/product_location_categories": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/retail_product_location_category_request_body"
              }
            }
          },
          "required": true
        },
        "tags": [
          "Master data"
        ],
        "summary": "Product Location Categories",
        "description": "Merchandising Product catalogue. This endpoint is in development and not yet supported.",
        "operationId": "PostProductLocationCategories",
        "parameters": [
          {
            "$ref": "#/components/parameters/HttpHeader"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Accepted"
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "413": {
            "$ref": "#/components/responses/Problem413Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      }
    },
    "/data/master/product_location_category_assortments": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/retail_product_location_category_assortment_request_body"
              }
            }
          },
          "required": true
        },
        "tags": [
          "Master data"
        ],
        "summary": "Product Location Category Assortments",
        "description": "Product lists to work from when building planograms. This endpoint is in development and not yet supported.",
        "operationId": "PostProductLocationCategoryAssortments",
        "parameters": [
          {
            "$ref": "#/components/parameters/HttpHeader"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Accepted"
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "413": {
            "$ref": "#/components/responses/Problem413Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      }
    },
    "/data/master/product_location_constraint_groups": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/retail_product_location_constraint_group_request_body"
              }
            }
          },
          "required": true
        },
        "tags": [
          "Master data"
        ],
        "summary": "Product Location Constraint Groups",
        "description": "Product-location constraint groups, used to connect individual product-locations to constraint groups according to codes.",
        "operationId": "PostProductLocationConstraintGroups",
        "parameters": [
          {
            "$ref": "#/components/parameters/HttpHeader"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Accepted"
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "413": {
            "$ref": "#/components/responses/Problem413Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      }
    },
    "/data/master/product_location_coordination_groups": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/retail_product_location_coordination_group_request_body"
              }
            }
          },
          "required": true
        },
        "tags": [
          "Master data"
        ],
        "summary": "Product Location Coordination Groups",
        "description": "Product-location coordination groups, used to connect individual product-locations to coordination groups according to codes.",
        "operationId": "PostProductLocationCoordinationGroups",
        "parameters": [
          {
            "$ref": "#/components/parameters/HttpHeader"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Accepted"
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "413": {
            "$ref": "#/components/responses/Problem413Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      }
    },
    "/data/master/product_location_delivery_schedules": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/retail_product_location_delivery_schedule_request_body"
              }
            }
          },
          "required": true
        },
        "tags": [
          "Master data"
        ],
        "summary": "Product Location Delivery Schedules",
        "description": "Product-location delivery schedules, used to connect individual product-locations to delivery schedules according to codes.",
        "operationId": "PostProductLocationDeliverySchedules",
        "parameters": [
          {
            "$ref": "#/components/parameters/HttpHeader"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Accepted"
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "413": {
            "$ref": "#/components/responses/Problem413Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      },
      "delete": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/retail_delete_product_location_delivery_schedule_request_body"
              }
            }
          },
          "required": true
        },
        "tags": [
          "Master data"
        ],
        "summary": "Product Location Delivery Schedules",
        "description": "Delete one or more product-location delivery schedule records. Each record is uniquely identified by the `delivery_schedule`, `location` and `product` attributes",
        "operationId": "DeleteProductLocationDeliverySchedules",
        "parameters": [
          {
            "$ref": "#/components/parameters/HttpHeader"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Accepted"
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "413": {
            "$ref": "#/components/responses/Problem413Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      }
    },
    "/data/master/product_location_price_calendars": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/retail_product_location_price_calendar_request_body"
              }
            }
          },
          "required": true
        },
        "tags": [
          "Master data"
        ],
        "summary": "Product Location Price Calendars",
        "description": "Demand AI forecasting, but also useful for reporting purposes.",
        "operationId": "PostProductLocationPriceCalendars",
        "parameters": [
          {
            "$ref": "#/components/parameters/HttpHeader"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Accepted"
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "413": {
            "$ref": "#/components/responses/Problem413Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      }
    },
    "/data/master/product_location_supplier_replenishment_agreements": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/retail_product_location_supplier_replenishment_agreement_request_body"
              }
            }
          },
          "required": true
        },
        "tags": [
          "Master data"
        ],
        "summary": "Product Location Supplier Replenishment Agreements",
        "description": "Information on PLS replenishment agreements.",
        "operationId": "PostProductLocationSupplierReplenishmentAgreements",
        "parameters": [
          {
            "$ref": "#/components/parameters/HttpHeader"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Accepted"
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "413": {
            "$ref": "#/components/responses/Problem413Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      }
    },
    "/data/master/product_location_suppliers": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/retail_product_location_supplier_request_body"
              }
            }
          },
          "required": true
        },
        "tags": [
          "Master data"
        ],
        "summary": "Product Location Suppliers",
        "description": "Product-location supplier -data for information specific to certain product-location-supplier combinations.",
        "operationId": "PostProductLocationSuppliers",
        "parameters": [
          {
            "$ref": "#/components/parameters/HttpHeader"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Accepted"
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "413": {
            "$ref": "#/components/responses/Problem413Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      }
    },
    "/data/master/product_locations": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/retail_product_location_request_body"
              }
            }
          },
          "required": true
        },
        "tags": [
          "Master data"
        ],
        "summary": "Product Locations",
        "description": "Product-location specific data.",
        "operationId": "PostProductLocations",
        "parameters": [
          {
            "$ref": "#/components/parameters/HttpHeader"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Accepted"
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "413": {
            "$ref": "#/components/responses/Problem413Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      }
    },
    "/data/master/product_product_classes": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/retail_product_product_class_request_body"
              }
            }
          },
          "required": true
        },
        "tags": [
          "Master data"
        ],
        "summary": "Product-product classes",
        "description": "Data to tie product classes to products.",
        "operationId": "PostProductProductClasses",
        "parameters": [
          {
            "$ref": "#/components/parameters/HttpHeader"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Accepted"
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "413": {
            "$ref": "#/components/responses/Problem413Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      }
    },
    "/data/master/products": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/retail_product_request_body"
              }
            }
          },
          "required": true
        },
        "tags": [
          "Master data"
        ],
        "summary": "Products",
        "description": "Product/item specific master data.",
        "operationId": "PostProducts",
        "parameters": [
          {
            "$ref": "#/components/parameters/HttpHeader"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Accepted"
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "413": {
            "$ref": "#/components/responses/Problem413Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      }
    },
    "/data/master/product_replacements_and_references": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/retail_product_replacement_and_reference_request_body"
              }
            }
          },
          "required": true
        },
        "tags": [
          "Master data"
        ],
        "summary": "Product replacements and refs",
        "description": "Replacement and reference data for products, locations and product-locations.",
        "operationId": "PostProductReplacementsAndReferences",
        "parameters": [
          {
            "$ref": "#/components/parameters/HttpHeader"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Accepted"
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "413": {
            "$ref": "#/components/responses/Problem413Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      },
      "delete": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/retail_delete_product_replacement_and_reference_request_body"
              }
            }
          },
          "required": true
        },
        "tags": [
          "Master data"
        ],
        "summary": "Product replacements and refs",
        "description": "Delete one or more replacements and references records. Each record is uniquely identified by the `new_location_code`, `old_location_code`, `new_product_code` and `old_product_code` attributes or a combination of those depending on how the records have initally been created.",
        "operationId": "DeleteProductReplacementsAndReferences",
        "parameters": [
          {
            "$ref": "#/components/parameters/HttpHeader"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Accepted"
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "413": {
            "$ref": "#/components/responses/Problem413Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      }
    },
    "/data/master/replenishment_agreements": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/retail_replenishment_agreement_request_body"
              }
            }
          },
          "required": true
        },
        "tags": [
          "Master data"
        ],
        "summary": "Replenishment Agreements",
        "description": "Information on replenishment agreements.",
        "operationId": "PostReplenishmentAgreements",
        "parameters": [
          {
            "$ref": "#/components/parameters/HttpHeader"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Accepted"
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "413": {
            "$ref": "#/components/responses/Problem413Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      }
    },
    "/data/master/supplier_closures": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/retail_supplier_closure_request_body"
              }
            }
          },
          "required": true
        },
        "tags": [
          "Master data"
        ],
        "summary": "Supplier Closures",
        "description": "Closure data for suppliers, is used to signal closures.",
        "operationId": "PostSupplierClosures",
        "parameters": [
          {
            "$ref": "#/components/parameters/HttpHeader"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Accepted"
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "413": {
            "$ref": "#/components/responses/Problem413Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      }
    },
    "/data/master/suppliers": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/retail_supplier_request_body"
              }
            }
          },
          "required": true
        },
        "tags": [
          "Master data"
        ],
        "summary": "Suppliers",
        "description": "Supplier specific master data.",
        "operationId": "PostSuppliers",
        "parameters": [
          {
            "$ref": "#/components/parameters/HttpHeader"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Accepted"
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "413": {
            "$ref": "#/components/responses/Problem413Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      }
    },
    "/data/transactions/sales_forecasts": {
      "get": {
        "tags": [
          "Transactions"
        ],
        "summary": "Sales Forecasts List",
        "description": "List all the Sales Forecasts available for download. Use query parameter `download_status` to include downloaded data. Filtered out by default.",
        "operationId": "list_GetSalesForecasts",
        "parameters": [
          {
            "description": "Filters out data based on their download status. `downloaded` returns data whose download task has been triggered; `all` returns all the data despite of their download status. By default returns data that didn't have any download triggered.",
            "in": "query",
            "name": "download_status",
            "schema": {
              "type": "string",
              "enum": [
                "all",
                "downloaded"
              ]
            },
            "example": "all"
          }
        ],
        "responses": {
          "200": {
            "description": "Accepted",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/outbound_list_endpoint"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      }
    },
    "/data/transactions/sales_forecasts/{id}": {
      "get": {
        "tags": [
          "Transactions"
        ],
        "summary": "Sales Forecasts",
        "description": "Download a batch of Sales Forecasts.",
        "operationId": "get_GetSalesForecasts",
        "parameters": [
          {
            "description": "Identifier of data to download.",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "12345678-abcd-efgh-4321-787878787878"
          }
        ],
        "responses": {
          "200": {
            "description": "Accepted",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/retail_sales_forecasts"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      }
    },
    "/data/transactions/order_proposals": {
      "get": {
        "tags": [
          "Transactions"
        ],
        "summary": "Order Proposals List",
        "description": "List all the Order Proposals available for download. Use query parameter `download_status` to include downloaded data. Filtered out by default.",
        "operationId": "list_GetOrderProposals",
        "parameters": [
          {
            "description": "Filters out data based on their download status. `downloaded` returns data whose download task has been triggered; `all` returns all the data despite of their download status. By default returns data that didn't have any download triggered.",
            "in": "query",
            "name": "download_status",
            "schema": {
              "type": "string",
              "enum": [
                "all",
                "downloaded"
              ]
            },
            "example": "all"
          }
        ],
        "responses": {
          "200": {
            "description": "Accepted",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/outbound_list_endpoint"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      }
    },
    "/data/transactions/order_proposals/{id}": {
      "get": {
        "tags": [
          "Transactions"
        ],
        "summary": "Order Proposals",
        "description": "Download a batch of Order Proposals.",
        "operationId": "get_GetOrderProposals",
        "parameters": [
          {
            "description": "Identifier of data to download.",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "12345678-abcd-efgh-4321-787878787878"
          }
        ],
        "responses": {
          "200": {
            "description": "Accepted",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/retail_order_proposals"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      }
    },
    "/data/transactions/workload_driver_forecasts_day": {
      "get": {
        "tags": [
          "Transactions"
        ],
        "summary": "Workload Driver Forecasts Day List",
        "description": "List all the Workload Driver Forecasts Day available for download. Use query parameter `download_status` to include downloaded data. Filtered out by default.",
        "operationId": "list_GetWorkloadDriverForecastsDay",
        "parameters": [
          {
            "description": "Filters out data based on their download status. `downloaded` returns data whose download task has been triggered; `all` returns all the data despite of their download status. By default returns data that didn't have any download triggered.",
            "in": "query",
            "name": "download_status",
            "schema": {
              "type": "string",
              "enum": [
                "all",
                "downloaded"
              ]
            },
            "example": "all"
          }
        ],
        "responses": {
          "200": {
            "description": "Accepted",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/outbound_list_endpoint"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      }
    },
    "/data/transactions/workload_driver_forecasts_day/{id}": {
      "get": {
        "tags": [
          "Transactions"
        ],
        "summary": "Workload Driver Forecasts Day",
        "description": "Download a batch of Workload Driver Forecasts Day.",
        "operationId": "get_GetWorkloadDriverForecastsDay",
        "parameters": [
          {
            "description": "Identifier of data to download.",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "12345678-abcd-efgh-4321-787878787878"
          }
        ],
        "responses": {
          "200": {
            "description": "Accepted",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/retail_workload_driver_forecasts_day"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      }
    },
    "/data/transactions/workload_driver_forecasts_quarter": {
      "get": {
        "tags": [
          "Transactions"
        ],
        "summary": "Workload Driver Forecasts Quarter List",
        "description": "List all the Workload Driver Forecasts Quarter available for download. Use query parameter `download_status` to include downloaded data. Filtered out by default.",
        "operationId": "list_GetWorkloadDriverForecastsQuarter",
        "parameters": [
          {
            "description": "Filters out data based on their download status. `downloaded` returns data whose download task has been triggered; `all` returns all the data despite of their download status. By default returns data that didn't have any download triggered.",
            "in": "query",
            "name": "download_status",
            "schema": {
              "type": "string",
              "enum": [
                "all",
                "downloaded"
              ]
            },
            "example": "all"
          }
        ],
        "responses": {
          "200": {
            "description": "Accepted",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/outbound_list_endpoint"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      }
    },
    "/data/transactions/workload_driver_forecasts_quarter/{id}": {
      "get": {
        "tags": [
          "Transactions"
        ],
        "summary": "Workload Driver Forecasts Quarter",
        "description": "Download a batch of Workload Driver Forecasts Quarter.",
        "operationId": "get_GetWorkloadDriverForecastsQuarter",
        "parameters": [
          {
            "description": "Identifier of data to download.",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "12345678-abcd-efgh-4321-787878787878"
          }
        ],
        "responses": {
          "200": {
            "description": "Accepted",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/retail_workload_driver_forecasts_quarter"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem400Response"
          },
          "401": {
            "$ref": "#/components/responses/Problem401Response"
          },
          "403": {
            "$ref": "#/components/responses/Problem403Response"
          },
          "404": {
            "$ref": "#/components/responses/Problem404Response"
          },
          "429": {
            "$ref": "#/components/responses/Problem429Response"
          },
          "5XX": {
            "$ref": "#/components/responses/Problem5xxResponse"
          }
        }
      }
    }
  },
  "components": {
    "parameters": {
      "HttpHeader": {
        "in": "header",
        "name": "Content-Type",
        "description": "The media type in the Content-Type header must be specified and must be _application/json_. The character encoding of the data is expected to be UTF-8.",
        "required": true,
        "example": "application/json",
        "schema": {
          "type": "string"
        }
      },
      "request_id": {
        "description": "Request ID, required unless timestamp parameters are specified",
        "in": "query",
        "name": "request_id",
        "example": "c88ca2da-5e77-4f63-bbee-61df9edf591f",
        "schema": {
          "format": "uuid",
          "type": "string"
        }
      },
      "start_timestamp": {
        "description": "Start timestamp (inclusive), required unless request_id is specified",
        "in": "query",
        "name": "start_timestamp",
        "example": "2023-06-13T00:00:00.000Z",
        "schema": {
          "format": "date-time",
          "type": "string"
        }
      },
      "end_timestamp": {
        "description": "End timestamp (inclusive), required unless request_id is specified",
        "in": "query",
        "name": "end_timestamp",
        "example": "2023-06-14T12:34:56.999Z",
        "schema": {
          "format": "date-time",
          "type": "string"
        }
      },
      "page": {
        "description": "Page number, 1-based",
        "in": "query",
        "name": "page",
        "example": 1,
        "schema": {
          "type": "integer",
          "default": 1
        }
      },
      "per_page": {
        "description": "Number of records per page",
        "in": "query",
        "name": "per_page",
        "example": 5,
        "schema": {
          "type": "integer",
          "default": 500,
          "maximum": 10000
        }
      }
    },
    "responses": {
      "Problem400Response": {
        "description": "Bad Request",
        "content": {
          "application/problem+json": {
            "schema": {
              "$ref": "#/components/schemas/problem_details_400"
            }
          }
        }
      },
      "Problem401Response": {
        "description": "Unauthorized",
        "content": {
          "application/problem+json": {
            "schema": {
              "$ref": "#/components/schemas/problem_details_general"
            },
            "example": {
              "type": "https://relexsolutions.com/rest/errors/401",
              "title": "Unauthorized",
              "status": 401
            }
          }
        }
      },
      "Problem403Response": {
        "description": "Forbidden",
        "content": {
          "application/problem+json": {
            "schema": {
              "$ref": "#/components/schemas/problem_details_general"
            },
            "example": {
              "type": "https://relexsolutions.com/rest/errors/403",
              "title": "Forbidden",
              "status": 403
            }
          }
        }
      },
      "Problem404Response": {
        "description": "Page Not Found",
        "content": {
          "application/problem+json": {
            "schema": {
              "$ref": "#/components/schemas/problem_details_general"
            },
            "example": {
              "type": "https://relexsolutions.com/rest/errors/404",
              "title": "Page Not Found",
              "status": 404
            }
          }
        }
      },
      "Problem413Response": {
        "description": "Content Too Large",
        "content": {
          "application/problem+json": {
            "schema": {
              "$ref": "#/components/schemas/problem_details_general"
            },
            "example": {
              "type": "https://relexsolutions.com/rest/errors/413",
              "title": "Payload Too Large",
              "status": 413,
              "detail": "Payload was larger than 1mb"
            }
          }
        }
      },
      "Problem429Response": {
        "description": "Too Many Requests",
        "content": {
          "application/problem+json": {
            "schema": {
              "$ref": "#/components/schemas/problem_details_general"
            },
            "example": {
              "type": "https://relexsolutions.com/rest/errors/429",
              "title": "Too Many Requests",
              "status": 429,
              "detail": "Rate limit has been exceeded: The request could not be completed due to the client exceeding the request limit."
            }
          }
        }
      },
      "Problem5xxResponse": {
        "description": "Internal Server Error",
        "content": {
          "application/problem+json": {
            "schema": {
              "$ref": "#/components/schemas/problem_details_general"
            },
            "example": {
              "type": "https://relexsolutions.com/rest/errors/500",
              "title": "An internal error occurred.",
              "status": 500,
              "detail": "The server is unable to process the request."
            }
          }
        }
      },
      "Accepted": {
        "description": "Accepted: Request was accepted. Data is forwarded for further processing.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/accepted"
            }
          }
        }
      }
    },
    "securitySchemes": {
      "OAuth2": {
        "type": "oauth2",
        "description": "The RELEX Data API uses OAuth 2 with the client credentials flow.",
        "flows": {
          "clientCredentials": {
            "tokenUrl": "https://identity.prod-eu.prod.cc.relexsolutions.com/login/restapi_prod/connect/token",
            "scopes": {
              "openid_api": "Internal use"
            }
          }
        }
      }
    },
    "schemas": {
      "version": {
        "type": "object",
        "properties": {
          "meta": {
            "type": "object",
            "properties": {
              "code": {
                "type": "number",
                "description": "HTTP response code",
                "example": 200
              },
              "message": {
                "type": "string",
                "description": "HTTP response message",
                "example": "OK"
              }
            }
          },
          "data": {
            "type": "object",
            "properties": {
              "api_version": {
                "type": "string",
                "description": "API version according to OpenAPI specification",
                "example": "v2.7.7-prelease"
              },
              "core_version": {
                "type": "string",
                "description": "Version number including core dependencies of REST API",
                "example": "v1.2.3"
              },
              "data_version": {
                "type": "string",
                "description": "Data model version",
                "example": "v3.2.1"
              }
            }
          }
        },
        "$schema": "https://json-schema.org/draft/2020-12/schema"
      },
      "problem_details_400": {
        "description": "Implementation of [RFC7807](https://tools.ietf.org/html/rfc7807) Problem Details object.  Content type should always be ```application/problem+json```.  Problem type definitions MAY extend the problem details object with additional members",
        "type": "object",
        "required": [
          "type",
          "title",
          "status"
        ],
        "properties": {
          "type": {
            "description": "A URI reference [RFC3986] that identifies the problem type.",
            "type": "string",
            "format": "uri",
            "example": "https://relexsolutions.com/rest/errors/400"
          },
          "title": {
            "description": "A short, human-readable summary of the problem type.",
            "type": "string",
            "example": "Bad Request"
          },
          "status": {
            "description": "The HTTP status code ([RFC7231], Section 6) generated by the origin server for this occurrence of the problem.",
            "type": "number",
            "example": 400
          },
          "detail": {
            "description": "A human-readable explanation specific to this occurrence of the problem.",
            "type": "string",
            "example": "validating the payload's JSON schema failed"
          },
          "debugging": {
            "description": "Debugging information for DEV and QA environments.",
            "type": "string"
          },
          "validation_errors": {
            "type": "array",
            "description": "A list of issues that exist with the request.",
            "items": {
              "type": "object",
              "properties": {
                "location": {
                  "type": "string"
                },
                "message": {
                  "type": "string"
                },
                "violation": {
                  "type": "string"
                }
              }
            },
            "example": [
              {
                "location": "/data/0",
                "message": "missing properties: 'code'",
                "violation": "required"
              },
              {
                "location": "/meta/example",
                "message": "expected string, but got number",
                "violation": "type"
              }
            ]
          }
        }
      },
      "problem_details_general": {
        "description": "Implementation of [RFC7807](https://tools.ietf.org/html/rfc7807) Problem Details object.  Content type should always be ```application/problem+json```.  Problem type definitions MAY extend the problem details object with additional members",
        "type": "object",
        "required": [
          "type",
          "title",
          "status"
        ],
        "properties": {
          "type": {
            "description": "A URI reference [RFC3986] that identifies the problem type.",
            "type": "string",
            "format": "uri",
            "example": "https://relexsolutions.com/issue"
          },
          "title": {
            "description": "A short, human-readable summary of the problem type.",
            "type": "string",
            "example": "Bad Request"
          },
          "status": {
            "description": "The HTTP status code ([RFC7231], Section 6) generated by the origin server for this occurrence of the problem.",
            "type": "number",
            "example": 400
          },
          "detail": {
            "description": "A human-readable explanation specific to this occurrence of the problem.",
            "type": "string"
          }
        }
      },
      "errors": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "description": "Unique message identifier",
                  "example": "377f84f0-2f74-11ed-a261-0242ac120002"
                },
                "model": {
                  "type": "string",
                  "description": "Type of record",
                  "example": "product-location"
                },
                "identifier": {
                  "type": "object",
                  "description": "Record Identifier",
                  "example": {
                    "product_code": "foo",
                    "location_code": "bar"
                  }
                },
                "record": {
                  "type": "object",
                  "description": "A complete record, which caused an error",
                  "example": {
                    "product_code": "foo",
                    "location_code": "bar"
                  }
                },
                "error": {
                  "type": "object",
                  "description": "Object with error details",
                  "properties": {
                    "type": {
                      "type": "string",
                      "description": "Machine-readable error message",
                      "example": "EnricherError"
                    },
                    "description": {
                      "type": "string",
                      "description": "Human-readable error message",
                      "example": "Could not find a match for product_code 'FOO2'"
                    }
                  },
                  "additionalProperties": false
                },
                "event_timestamp": {
                  "type": "string",
                  "description": "The event timestamp",
                  "format": "date-time",
                  "example": "2022-08-21T09:11:08+00:00"
                },
                "ingestion_timestamp": {
                  "type": "string",
                  "description": "The message ingestion timestamp",
                  "format": "date-time",
                  "example": "2022-08-21T09:11:08+00:00"
                },
                "source": {
                  "type": "string",
                  "description": "Identifier of a system where event was generated",
                  "example": "RELEX Plan"
                },
                "batch_id": {
                  "type": "string",
                  "description": "A unique identifier assigned to a batch of events",
                  "format": "uuid",
                  "example": "d64be281-3470-411a-9235-9e15c7b500b8"
                },
                "request_id": {
                  "type": "string",
                  "description": "A unique identifier assigned to a request",
                  "format": "uuid",
                  "example": "c88ca2da-5e77-4f63-bbee-61df9edf591f"
                }
              },
              "additionalProperties": false
            }
          },
          "_links": {
            "type": "object",
            "properties": {
              "self": {
                "type": "object",
                "properties": {
                  "href": {
                    "type": "string",
                    "example": "/errors?request_id=d64be281-3470-411a-9235-9e15c7b500b8"
                  }
                },
                "additionalProperties": false
              },
              "next": {
                "type": "object",
                "properties": {
                  "href": {
                    "type": "string",
                    "example": "/errors?request_id=d64be281-3470-411a-9235-9e15c7b500b8&page=2"
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          }
        },
        "additionalProperties": false,
        "$schema": "https://json-schema.org/draft/2020-12/schema"
      },
      "health": {
        "type": "object",
        "properties": {
          "meta": {
            "type": "object",
            "properties": {
              "code": {
                "type": "number",
                "description": "HTTP response code",
                "example": 200
              },
              "message": {
                "type": "string",
                "description": "HTTP response message",
                "example": "OK"
              }
            }
          },
          "data": {
            "type": "object"
          }
        },
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false
      },
      "inbound_meta": {
        "type": "object",
        "properties": {
          "timestamp": {
            "type": "integer",
            "description": "Timestamp used to order messages. For example UNIX timestamp in UTC. If there are multiple senders timestamps they generate should be synchronized",
            "example": 1624437035
          },
          "batch_id": {
            "type": "string",
            "description": "A UUID that uniquely identifies this particular request.",
            "example": "1692c610-6d26-11eb-9439-0242ac130002",
            "format": "uuid"
          }
        },
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false
      },
      "time": {
        "pattern": "^(2[0-3]|[01]?[0-9]):([0-5]?[0-9])$",
        "type": [
          "string",
          "null"
        ],
        "example": "15:05"
      },
      "adjustment": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "minLength": 1,
            "description": "Type of the transaction. Always ADJUSTMENT.",
            "example": "ADJUSTMENT",
            "enum": [
              "ADJUSTMENT"
            ]
          },
          "product": {
            "type": "string",
            "minLength": 1,
            "description": "Product code. Reference to Products.",
            "example": "PRODUCT1"
          },
          "location": {
            "type": "string",
            "minLength": 1,
            "description": "Location code. Reference to Locations.",
            "example": "LOCATION1"
          },
          "date": {
            "type": "string",
            "minLength": 1,
            "format": "date",
            "description": "Transaction posting date.",
            "example": "2018-09-16"
          },
          "quantity": {
            "type": "number",
            "description": "Transaction quantity in inventory units (e.g. pieces). Quantity sign defines the transaction direction as seen by the warehouse, e.g. outgoing sales is sent as negative quantity. All quantities should be given in base unit of measure (e.g. SKU, stock unit, piece, smallest possible unit).",
            "example": 1
          },
          "transaction_uid": {
            "type": [
              "string",
              "null"
            ],
            "description": "Transaction UID. Unique identifier for transaction row. Can be used as key for updates to the row.",
            "example": "TID12345"
          },
          "value": {
            "type": [
              "number",
              "null"
            ],
            "description": "Value of the whole transaction in the location's currency (e.g. \u20ac, \u00a3, $). Value should always be positive. Transaction quantity determines the direction of the transaction.",
            "minimum": 0,
            "example": 1.99
          },
          "time": {
            "description": "Time of the transaction (24h clock hh:mm)",
            "$ref": "#/components/schemas/time"
          },
          "partner_code": {
            "type": [
              "string",
              "null"
            ],
            "description": "Defines the partner related to the transaction, usually: -Sales transactions: Customer; -Incoming deliveries: Supplier; -Stock transfers: Sending/receiving warehouse",
            "example": "SUPPLIER1"
          },
          "reference": {
            "type": [
              "string",
              "null"
            ],
            "description": "Sales or purchase order number related to sale or goods receival transaction.",
            "example": "ORDER_12345"
          },
          "order_row": {
            "type": [
              "string",
              "null"
            ],
            "description": "Sales or purchase order row number related to sale or goods receival transaction.",
            "example": "1"
          },
          "order_type": {
            "type": [
              "string",
              "null"
            ],
            "description": "Additional transaction type. E.g. delivery channel for deliveries (from supplier, from DC)",
            "example": "DC"
          },
          "expiration_date": {
            "type": [
              "string",
              "null"
            ],
            "format": "date",
            "description": "Expiration date of the goods received.",
            "example": "2018-06-01"
          }
        },
        "required": [
          "type",
          "product",
          "location",
          "date",
          "quantity"
        ],
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false
      },
      "retail_adjustment_request_body": {
        "type": "object",
        "required": [
          "data"
        ],
        "additionalProperties": false,
        "properties": {
          "meta": {
            "type": "object",
            "$ref": "#/components/schemas/inbound_meta"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "$ref": "#/components/schemas/adjustment"
            }
          }
        }
      },
      "accepted": {
        "type": "object",
        "required": [
          "meta",
          "data"
        ],
        "properties": {
          "meta": {
            "type": "object",
            "properties": {
              "code": {
                "type": "integer",
                "description": "HTTP status code for the response. Is always in 2xx range for accepted messages",
                "example": 200
              },
              "message": {
                "type": "string",
                "description": "HTTP status message for the response.",
                "example": "OK"
              },
              "request_id": {
                "type": "string",
                "description": "A UUID that uniquely identifies this particular response for later processing metadata retrieval.",
                "example": "1692c610-6d26-11eb-9439-0242ac130002",
                "format": "uuid"
              }
            },
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "additionalProperties": false
          },
          "data": {
            "type": "object",
            "properties": {},
            "additionalProperties": false
          }
        }
      },
      "balance": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "minLength": 1,
            "description": "Supported balance types are: BALANCE = Current physical stock level",
            "example": "BALANCE",
            "enum": [
              "BALANCE"
            ]
          },
          "product": {
            "type": "string",
            "minLength": 1,
            "description": "Product code (code for finished product or stock keeping unit). Reference to Products.",
            "example": "PRODUCT1"
          },
          "location": {
            "type": "string",
            "minLength": 1,
            "description": "Inventory location code (i.e. code for affected store, warehouse, etc.). Reference to Locations.",
            "example": "LOCATION1"
          },
          "date": {
            "type": "string",
            "minLength": 1,
            "format": "date",
            "description": "Balance date i.e. date of the product-location balance. Previous day's date in the daily transfer. For historical balances the date of the balance.",
            "example": "2018-09-30"
          },
          "balance": {
            "type": "number",
            "description": "Physical balance quantity in the location in base unit of measure (e.g. SKU, stock unit, piece, smallest possible unit). Balance quantity should be always positive and possible reservations are send as open sales orders.",
            "example": 15
          },
          "value": {
            "type": [
              "number",
              "null"
            ],
            "description": "Value of the whole transaction in the location's currency (e.g. \u20ac, \u00a3, $). Value should always be positive as transaction quantity determines the direction of the transaction. Usually based on purchase price. Negative values are automatically converted to the positive absolute value of the inserted value.",
            "minimum": 0,
            "example": 29.85
          },
          "time": {
            "description": "If balances are sent multiple times during the day, indicates the time of the balance information, i.e. when it was fetched from source system",
            "$ref": "#/components/schemas/time"
          }
        },
        "required": [
          "type",
          "product",
          "location",
          "date",
          "balance"
        ],
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false
      },
      "retail_balance_request_body": {
        "type": "object",
        "required": [
          "data"
        ],
        "additionalProperties": false,
        "properties": {
          "meta": {
            "type": "object",
            "$ref": "#/components/schemas/inbound_meta"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "$ref": "#/components/schemas/balance"
            }
          }
        }
      },
      "batch_balance": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "minLength": 1,
            "description": "Supported balance type: BATCH_BALANCE = Current physical stock divided to batches based on spoiling date",
            "example": "BATCH_BALANCE",
            "enum": [
              "BATCH_BALANCE"
            ]
          },
          "product": {
            "type": "string",
            "minLength": 1,
            "description": "Item code (code for finished product or stock keeping unit)",
            "example": "PRODUCT1"
          },
          "location": {
            "type": "string",
            "minLength": 1,
            "description": "Inventory location code (i.e. code for affected store, warehouse, etc.). Reference to Locations.",
            "example": "LOCATION1"
          },
          "date": {
            "type": "string",
            "minLength": 1,
            "format": "date",
            "description": "Balance date i.e. date of the batch balance. Previous day's date in the daily transfer. For historical balances the date of the balance.",
            "example": "2018-09-30"
          },
          "balance": {
            "type": "number",
            "description": "Physical batch balance quantity in the location in base unit of measure (e.g. SKU, stock unit, piece, smallest possible unit). \nBatch balance quantity should be always positive and the sum of non-expired batch balances should equal the normal balance.",
            "example": 3
          },
          "value": {
            "type": [
              "number",
              "null"
            ],
            "description": "Value of the whole transaction in the location's currency (e.g. \u20ac, \u00a3, $). Value should always be positive as transaction quantity determines the direction of the transaction. Usually based on purchase price. Negative values are automatically converted to the positive absolute value of the inserted value.",
            "minimum": 0,
            "example": 5.97
          },
          "time": {
            "description": "If batch balances are sent multiple times during the day, indicates the time when balance was fetched from source system",
            "$ref": "#/components/schemas/time"
          },
          "estimated_date": {
            "type": "string",
            "minLength": 1,
            "format": "date",
            "description": "Last valid date ('Best before date') for the batch. Batch balance is expected to become non-sellable at the end of this date. Forecasted spoilage in RELEX takes also product-location's required remaining shelf life into account (effective spoiling date = 'estimated_date' - 'required remaining shelf life').",
            "example": "2018-10-05"
          },
          "batch_manufacturing_date": {
            "type": [
              "string",
              "null"
            ],
            "format": "date",
            "description": "Date of manufacture of the batch. Only relevant for manufacturing customers.",
            "example": "2018-10-05"
          },
          "batch_code": {
            "type": [
              "string",
              "null"
            ],
            "description": "Unique identifier for the manufactured batch. Only relevant for manufacturing customers.",
            "example": "MB103938485"
          },
          "production_date": {
            "type": [
              "string",
              "null"
            ],
            "format": "date",
            "description": "Production date. The date when the batch was produced.",
            "example": "2025-03-01"
          },
          "available_date": {
            "type": [
              "string",
              "null"
            ],
            "format": "date",
            "description": "Available date. When the batch is in quality control or ageing, the date when it is expected to be available for sale and consumption.",
            "example": "2025-09-09"
          }
        },
        "required": [
          "type",
          "product",
          "location",
          "date",
          "balance",
          "estimated_date"
        ],
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false
      },
      "retail_batch_balance_request_body": {
        "type": "object",
        "required": [
          "data"
        ],
        "additionalProperties": false,
        "properties": {
          "meta": {
            "type": "object",
            "$ref": "#/components/schemas/inbound_meta"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "$ref": "#/components/schemas/batch_balance"
            }
          }
        }
      },
      "daily_sale": {
        "type": "object",
        "properties": {
          "date": {
            "type": "string",
            "minLength": 1,
            "format": "date",
            "description": "Transaction posting date",
            "example": "2020-12-15"
          },
          "location": {
            "type": "string",
            "description": "Location code. Reference to Locations.",
            "example": "LOCATION1",
            "minLength": 1
          },
          "product": {
            "type": "string",
            "description": "Product code. Reference to Products.",
            "example": "PRODUCT1",
            "minLength": 1
          },
          "quantity": {
            "type": "number",
            "description": "Transaction quantity in inventory units (e.g. pieces). Quantity sign defines the transaction direction as seen by the warehouse, e.g. outgoing sales is sent as negative quantity. All quantities should be given in base unit of measure (e.g. SKU, stock unit, piece, smallest possible unit).",
            "example": -1
          },
          "type": {
            "type": "string",
            "minLength": 1,
            "description": "Type of the transaction: SALE",
            "example": "SALE",
            "enum": [
              "SALE"
            ]
          },
          "transaction_uid": {
            "type": [
              "string",
              "null"
            ],
            "description": "Unique identifier for transaction row. ",
            "example": "TID12345"
          },
          "value": {
            "type": [
              "number",
              "null"
            ],
            "description": "Value as of revenue of the whole transaction in the location's currency (e.g. \u20ac, \u00a3, $) excluding sales taxes (e.g. VAT). Value should always be positive as transaction quantity determines the direction of the transaction.",
            "example": 15
          }
        },
        "required": [
          "date",
          "location",
          "product",
          "quantity",
          "type"
        ],
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false
      },
      "retail_daily_sale_request_body": {
        "type": "object",
        "required": [
          "data"
        ],
        "additionalProperties": false,
        "properties": {
          "meta": {
            "type": "object",
            "$ref": "#/components/schemas/inbound_meta"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "$ref": "#/components/schemas/daily_sale"
            }
          }
        }
      },
      "dc_transaction": {
        "type": "object",
        "properties": {
          "product": {
            "type": "string",
            "minLength": 1,
            "description": "Product code. Reference to Products.",
            "example": "PRODUCT1"
          },
          "location": {
            "type": "string",
            "minLength": 1,
            "description": "Location code. Reference to Locations.",
            "example": "LOCATION1"
          },
          "date": {
            "type": "string",
            "minLength": 1,
            "format": "date",
            "description": "Transaction posting date.",
            "example": "2018-07-01"
          },
          "sales_orders_quantity": {
            "type": "number",
            "description": "Only for type: OPEN_SALES_ORDER. Open order quantity in base unit of measure (e.g. SKU, stock unit, piece, smallest possible unit). Quantity sign defines the transaction direction as seen by the warehouse, so open sales order is sent as negative quantity.",
            "exclusiveMaximum": 0,
            "example": -2
          },
          "sales_orders_value": {
            "type": [
              "number",
              "null"
            ],
            "description": "Only for type: OPEN_SALES_ORDER. Value of the whole transaction in the location's currency (e.g. \u20ac, \u00a3, $). Value should always be positive as transaction quantity determines the direction of the transaction. Value suggestion: Sales value excluding tax. If the sales order is internal sale, the value should be the internal sales value used for the transaction",
            "minimum": 0,
            "example": 3.98
          },
          "balance": {
            "type": [
              "number",
              "null"
            ],
            "description": "Only for type: BALANCE or BATCH_BALANCE. Physical balance quantity in the location in base unit of measure (e.g. SKU, stock unit, piece, smallest possible unit). Balance quantity should be always positive and possible reservations are send as open sales orders.",
            "minimum": 0,
            "example": 50
          },
          "estimated_date": {
            "type": "string",
            "minLength": 1,
            "format": "date",
            "description": "For type SALES_ORDER: Requested/confirmed outbound delivery date. The date must reflect the time when the stock must be available for fulfilling an order. It does not reflect the actual date when the goods are delivered to the customer. For type BATCH_BALANCE: Last valid date (\"Best before date\") for the batch. Batch balance is expected to become non-sellable at the end of this date.",
            "example": "2018-07-01"
          },
          "type": {
            "type": "string",
            "minLength": 1,
            "description": "Type of the transaction. Must be one of BALANCE, BATCH_BALANCE or SALES_ORDER (=open sales order).",
            "example": "BALANCE",
            "enum": [
              "BALANCE",
              "BATCH_BALANCE",
              "SALES_ORDER"
            ]
          },
          "time": {
            "description": "If balances are sent multiple times during the day, indicates the time (24h clock hh:mm) of the balance or batch balance information, i.e. when it was fetched from source system",
            "$ref": "#/components/schemas/time"
          }
        },
        "required": [
          "product",
          "location",
          "date",
          "sales_orders_quantity",
          "estimated_date",
          "type"
        ],
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false
      },
      "retail_dc_transaction_request_body": {
        "type": "object",
        "required": [
          "data"
        ],
        "additionalProperties": false,
        "properties": {
          "meta": {
            "type": "object",
            "$ref": "#/components/schemas/inbound_meta"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "$ref": "#/components/schemas/dc_transaction"
            }
          }
        }
      },
      "delivery": {
        "$comment": "NOTE!! Any changes to this schema MUST BE MADE also in the goods_received.json schema file that contains this schema as a nested property!",
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "minLength": 1,
            "description": "Type of the transaction. Always DELIVERY or SPECIAL_DELIVERY.",
            "example": "DELIVERY",
            "enum": [
              "DELIVERY",
              "SPECIAL_DELIVERY"
            ]
          },
          "product": {
            "type": "string",
            "minLength": 1,
            "description": "Product code. Reference to Products.",
            "example": "PRODUCT1"
          },
          "location": {
            "type": "string",
            "minLength": 1,
            "description": "Location code. Reference to Locations.",
            "example": "LOCATION1"
          },
          "date": {
            "type": "string",
            "minLength": 1,
            "format": "date",
            "description": "Transaction posting date.",
            "example": "2018-06-01"
          },
          "quantity": {
            "type": "number",
            "description": "Transaction quantity in inventory units (e.g. pieces). Quantity sign defines the transaction direction as seen by the warehouse, e.g. outgoing sales is sent as negative quantity. All quantities should be given in base unit of measure (e.g. SKU, stock unit, piece, smallest possible unit).",
            "example": 24
          },
          "transaction_uid": {
            "type": [
              "string",
              "null"
            ],
            "description": "Transaction UID. Unique identifier for transaction row. Can be used as key for updates to the row.",
            "example": "TID12345"
          },
          "value": {
            "type": [
              "number",
              "null"
            ],
            "description": "Value of the whole transaction in the location's currency (e.g.\u20ac, \u00a3, $). Value should always be positive. (Transaction quantity determines the direction of the transaction.)",
            "minimum": 0,
            "example": 47.76
          },
          "reference": {
            "type": [
              "string",
              "null"
            ],
            "description": "Purchase order number related to goods receival transaction. RELEX uses reference code and order row from Delivery & Open purchase order in calculating supplier delivery accuracy metrics.",
            "example": "ORDER_12345"
          },
          "order_row": {
            "type": [
              "string",
              "null"
            ],
            "description": "Purchase order row number related to goods receival transaction. RELEX uses reference code and order row from Delivery & Open purchase order in calculating supplier delivery accuracy metrics.",
            "example": "1"
          },
          "partner_code": {
            "type": [
              "string",
              "null"
            ],
            "description": "Supplier code for incoming deliveries.",
            "example": "SUPPLIER1"
          },
          "time": {
            "description": "Time of the transaction (24h clock hh:mm)",
            "$ref": "#/components/schemas/time"
          },
          "order_type": {
            "type": [
              "string",
              "null"
            ],
            "description": "Additional transaction type. E.g. delivery channel for deliveries (from supplier, from DC)",
            "example": "DC"
          },
          "purchase_price": {
            "type": [
              "number",
              "null"
            ],
            "description": "Purchase cost of the whole sales transaction",
            "example": 24
          },
          "expiration_date": {
            "type": [
              "string",
              "null"
            ],
            "format": "date",
            "description": "Expiration date of the goods received.",
            "example": "2018-06-01"
          }
        },
        "required": [
          "type",
          "product",
          "location",
          "date",
          "quantity"
        ],
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false
      },
      "retail_delivery_request_body": {
        "type": "object",
        "required": [
          "data"
        ],
        "additionalProperties": false,
        "properties": {
          "meta": {
            "type": "object",
            "$ref": "#/components/schemas/inbound_meta"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "$ref": "#/components/schemas/delivery"
            }
          }
        }
      },
      "end_customer_transaction": {
        "type": "object",
        "properties": {
          "date": {
            "type": "string",
            "minLength": 1,
            "format": "date",
            "description": "Date of the end customer transaction. In sales, reflects the change of ownership.",
            "example": "2024-09-23"
          },
          "product": {
            "type": "string",
            "minLength": 1,
            "description": "Item code of finished productor stock keeping unit.",
            "example": "80903"
          },
          "end_customer": {
            "type": "string",
            "minLength": 1,
            "description": "Inventory end customer code.",
            "example": "5500"
          },
          "type": {
            "type": "string",
            "minLength": 1,
            "description": "Type of the transaction (SALE).",
            "example": "SALE",
            "enum": [
              "SALE",
              "SALE_OUT"
            ]
          },
          "sales_quantity": {
            "type": [
              "number",
              "null"
            ],
            "description": "Sales quantity in base unit of measure (e.g. peices). Quantity sign defines the transaction direction as seen by the location, e.g. outgoing sales is sent as negative quantity. Transaction quantity determines the direction of the transaction.",
            "example": 1.99
          },
          "transaction_uid": {
            "type": [
              "string",
              "null"
            ],
            "description": "Transaction UID. Unique identifier for transaction row. Can be used as key for updates to the row.",
            "example": "TID12345"
          },
          "picking_date": {
            "type": [
              "string",
              "null"
            ],
            "minLength": 1,
            "format": "date",
            "description": "Date when delivery for the sales order (type: SALE) was picked from source location.",
            "example": "2025-03-03"
          },
          "time": {
            "description": "Time of the transaction (24h clock hh:mm)",
            "$ref": "#/components/schemas/time"
          },
          "source_location": {
            "type": [
              "string",
              "null"
            ],
            "description": "For SALE, the warehouse location from where the goods were delivered to end customer. For SALE_OUT not relevant.",
            "example": "DC123"
          },
          "sales_value": {
            "type": [
              "number",
              "null"
            ],
            "description": "Value as of revenue of the whole transaction, in currency defined in currency field, excluding sales taxes (e.g. VAT). Always positive - transaction quantity sign determines the direction of the transaction.",
            "example": 230
          },
          "currency": {
            "type": [
              "string",
              "null"
            ],
            "description": "Currency of the sales value.",
            "example": "USD"
          },
          "reference": {
            "type": [
              "string",
              "null"
            ],
            "description": "Customer (sales) order number related to sale.",
            "example": "S1234567"
          },
          "order_row": {
            "type": [
              "string",
              "null"
            ],
            "description": "Customer (sales) order row number related to sale.",
            "example": "10"
          },
          "batch_code": {
            "type": [
              "string",
              "null"
            ],
            "description": "Batch code. Unique identifier for the sold batch.",
            "example": "B1234"
          },
          "cost_of_goods_sold": {
            "type": [
              "number",
              "null"
            ],
            "description": "Cost of goods sold. The standard cost or purchase price of the sales transaction row.",
            "example": 200
          }
        },
        "required": [
          "date",
          "product",
          "end_customer",
          "type",
          "sales_quantity"
        ],
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false
      },
      "retail_end_customer_transaction_request_body": {
        "type": "object",
        "required": [
          "data"
        ],
        "additionalProperties": false,
        "properties": {
          "meta": {
            "type": "object",
            "$ref": "#/components/schemas/inbound_meta"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "$ref": "#/components/schemas/end_customer_transaction"
            }
          }
        }
      },
      "footfall_count": {
        "type": "object",
        "properties": {
          "date": {
            "type": "string",
            "minLength": 1,
            "format": "date",
            "description": "Date of the footfall observation.",
            "example": "2018-01-01"
          },
          "location": {
            "type": "string",
            "minLength": 1,
            "description": "Location where the footfall observation is done",
            "example": "LOCATION1"
          },
          "quantity": {
            "type": "number",
            "description": "The footfall count in a location at specificed date and time bucket.",
            "example": 50
          },
          "time": {
            "description": "Time of the footfall observation.  Footfall count is aggregated to time buckets, recommended bucket size is 15 minutes. For example: If time bucket size is 15 minutes, then row with time 11:00 include aggregated footfall 11:00:00-11:14:59",
            "pattern": "^(2[0-3]|[01]?[0-9]):([0-5]?[0-9])$",
            "type": "string",
            "example": "15:05"
          }
        },
        "required": [
          "date",
          "location",
          "time",
          "quantity"
        ],
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false
      },
      "retail_footfall_count_request_body": {
        "type": "object",
        "required": [
          "data"
        ],
        "additionalProperties": false,
        "properties": {
          "meta": {
            "type": "object",
            "$ref": "#/components/schemas/inbound_meta"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "$ref": "#/components/schemas/footfall_count"
            }
          }
        }
      },
      "goods_received": {
        "type": "object",
        "properties": {
          "product": {
            "type": "string",
            "minLength": 1,
            "description": "Product code. Reference to Products.",
            "example": "PRODUCT1"
          },
          "location": {
            "type": "string",
            "minLength": 1,
            "description": "Location code. Reference to Locations.",
            "example": "LOCATION1"
          },
          "balances": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "type",
                "date",
                "balance"
              ],
              "properties": {
                "type": {
                  "type": "string",
                  "minLength": 1,
                  "description": "Type of the transaction. Always BALANCE.",
                  "example": "BALANCE",
                  "enum": [
                    "BALANCE"
                  ]
                },
                "date": {
                  "type": "string",
                  "minLength": 1,
                  "format": "date",
                  "description": "The date of the recorded balance quantity. Usually previous day's date except if reading in historical balances.",
                  "example": "2018-09-30"
                },
                "balance": {
                  "type": "number",
                  "description": "Physical balance quantity in the location in base unit of measure (e.g. pieces). RELEX calculates unreserved balance based on physical balance and open orders. Balance quantity should be always positive and possible reservations can be send as open sales orders. All quantities should be given in base unit of measure (e.g. SKU, stock unit, piece, smallest possible unit).",
                  "example": 15
                },
                "value": {
                  "type": [
                    "number",
                    "null"
                  ],
                  "description": "Book value of total quantity of the balance entry. Alternatively if book value is not available, the purchase value of the balance quantity can be used.",
                  "minimum": 0,
                  "example": 29.85
                },
                "time": {
                  "description": "Time of the transaction (24h clock hh:mm)",
                  "pattern": "^(2[0-3]|[01]?[0-9]):([0-5]?[0-9])$",
                  "type": [
                    "string",
                    "null"
                  ],
                  "example": "15:05"
                }
              },
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "additionalProperties": false
            }
          },
          "deliveries": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "type",
                "date",
                "quantity"
              ],
              "properties": {
                "type": {
                  "type": "string",
                  "minLength": 1,
                  "description": "Type of the transaction. Always DELIVERY or SPECIAL_DELIVERY.",
                  "example": "DELIVERY",
                  "enum": [
                    "DELIVERY",
                    "SPECIAL_DELIVERY"
                  ]
                },
                "date": {
                  "type": "string",
                  "minLength": 1,
                  "format": "date",
                  "description": "Transaction posting date.",
                  "example": "2018-06-01"
                },
                "quantity": {
                  "type": "number",
                  "description": "Transaction quantity in inventory units (e.g. pieces). Quantity sign defines the transaction direction as seen by the warehouse, e.g. outgoing sales is sent as negative quantity. All quantities should be given in base unit of measure (e.g. SKU, stock unit, piece, smallest possible unit).",
                  "example": 6
                },
                "transaction_uid": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "description": "Transaction UID. Unique identifier for transaction row. Can be used as key for updates to the row.",
                  "example": "TID12345"
                },
                "value": {
                  "type": [
                    "number",
                    "null"
                  ],
                  "description": "Value of the whole transaction in the location's currency (e.g. \u20ac, \u00a3, $). Value should always be positive. (Transaction quantity determines the direction of the transaction.)",
                  "minimum": 0,
                  "example": 47.76
                },
                "reference": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "description": "Purchase order number related to goods receival transaction. RELEX uses reference code and order row from Delivery & Open purchase order in calculating supplier delivery accuracy metrics.",
                  "example": "ORDER_12345"
                },
                "order_row": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "description": "Purchase order row number related to goods receival transaction. RELEX uses reference code and order row from Delivery & Open purchase order in calculating supplier delivery accuracy metrics.",
                  "example": "1"
                },
                "partner_code": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "description": "Supplier code for incoming deliveries.",
                  "example": "SUPPLIER1"
                },
                "time": {
                  "description": "Time of the transaction (24h clock hh:mm)",
                  "pattern": "^(2[0-3]|[01]?[0-9]):([0-5]?[0-9])$",
                  "type": [
                    "string",
                    "null"
                  ],
                  "example": "15:05"
                },
                "order_type": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "description": "Additional transaction type. E.g. delivery channel for deliveries (from supplier, from DC)",
                  "example": "DC"
                },
                "purchase_price": {
                  "type": [
                    "number",
                    "null"
                  ],
                  "description": "Purchase cost of the whole sales transaction",
                  "example": 24
                },
                "expiration_date": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "format": "date",
                  "description": "Expiration date of the goods received.",
                  "example": "2018-06-01"
                }
              },
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "additionalProperties": false
            }
          },
          "open_purchase_orders": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "type",
                "date",
                "quantity",
                "estimated_date"
              ],
              "properties": {
                "type": {
                  "type": "string",
                  "minLength": 1,
                  "description": "ORDER = Open purchase order (can be linked to DELIVERY with a reference number)",
                  "example": "ORDER",
                  "enum": [
                    "ORDER"
                  ]
                },
                "date": {
                  "type": "string",
                  "minLength": 1,
                  "format": "date",
                  "description": "Snapshot's date. The open order row has to be received every day the order remains open. Once it's delivered, the open order row is not sent anymore. For example, if an order is created on Jan 3rd and the snapshot date is Jan 8th, then the date field will contain '2018-01-08' assuming the order is still open Jan 8th. Snapshot's date is usually previous day's date except if reading in historical open orders.",
                  "example": "2018-05-25"
                },
                "quantity": {
                  "type": "number",
                  "description": "Open order quantity in inventory units (e.g. pieces). Quantity sign defines the transaction direction as seen by the warehouse, e.g. incoming purchase order is sent as positive quantity. All quantities should be given in base unit of measure (e.g. SKU, stock unit, piece, smallest possible unit).",
                  "example": 0
                },
                "value": {
                  "type": [
                    "number",
                    "null"
                  ],
                  "description": "Value of the whole transaction in the location's currency (e.g. \u20ac, \u00a3, $). Value should always be positive. Transaction quantity determines the direction of the transaction.",
                  "minimum": 0,
                  "example": 47.76
                },
                "estimated_date": {
                  "type": "string",
                  "format": "date",
                  "description": "Estimated delivery date of the order.",
                  "example": "2018-06-01"
                },
                "order_requested_date": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "format": "date",
                  "description": "Requested delivery date of the order. Can be used for measuring delivery accuracy.",
                  "example": "2019-07-03"
                },
                "reference": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "description": "Purchase order number. RELEX uses reference code and order row from Delivery & Open purchase order in calculating supplier delivery accuracy metrics.",
                  "example": "ORDER_12345"
                },
                "order_row": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "description": "Purchase order row number. RELEX uses reference code and order row from Delivery & Open purchase order in calculating supplier delivery accuracy metrics.",
                  "example": "1"
                },
                "order_proposal_reference": {
                  "type": [
                    "number",
                    "null"
                  ],
                  "description": "RELEX order proposal reference number. The order proposal number sent by RELEX to track open purchase orders.",
                  "example": 5314130
                },
                "transaction_uid": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "description": "Transaction UID. Unique identifier for transaction row. Can be used as key for updates to the row.",
                  "example": "TID12345"
                },
                "order_type": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "description": "Additional order type that can be used to distinct normal open orders from special open orders.",
                  "example": "SPECIAL_PURCHASE_ORDER"
                },
                "partner_code": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "description": "Supplier code for purchase orders.",
                  "example": "SUPPLIER1"
                },
                "estimated_delivery_time": {
                  "description": "Estimated delivery time (24h clock hh:mm)",
                  "pattern": "^(2[0-3]|[01]?[0-9]):([0-5]?[0-9])$",
                  "type": [
                    "string",
                    "null"
                  ],
                  "example": "15:05"
                },
                "expiration_date": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "format": "date",
                  "description": "Expiration date of the goods to be received.",
                  "example": "2020-09-18"
                }
              },
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "additionalProperties": false
            }
          }
        },
        "required": [
          "product",
          "location"
        ],
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false
      },
      "retail_goods_received_request_body": {
        "type": "object",
        "required": [
          "data"
        ],
        "additionalProperties": false,
        "properties": {
          "meta": {
            "type": "object",
            "$ref": "#/components/schemas/inbound_meta"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "array",
              "items": {
                "type": "object",
                "$ref": "#/components/schemas/goods_received"
              }
            }
          }
        }
      },
      "inventory_check": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "minLength": 1,
            "description": "Type of the transaction. Always INVENTORY_CHECK.",
            "example": "INVENTORY_CHECK",
            "enum": [
              "INVENTORY_CHECK"
            ]
          },
          "product": {
            "type": "string",
            "minLength": 1,
            "description": "Product code. Reference to Products.",
            "example": "PRODUCT1"
          },
          "location": {
            "type": "string",
            "minLength": 1,
            "description": "Location code. Reference to Locations.",
            "example": "LOCATION1"
          },
          "date": {
            "type": "string",
            "minLength": 1,
            "format": "date",
            "description": "Transaction posting date.",
            "example": "2018-09-15"
          },
          "quantity": {
            "type": "number",
            "description": "Transaction quantity in inventory units (e.g. pieces). Quantity sign defines the transaction direction as seen by the warehouse, e.g. outgoing sales is sent as negative quantity. All quantities should be given in base unit of measure (e.g. SKU, stock unit, piece, smallest possible unit).",
            "example": 17
          },
          "transaction_uid": {
            "type": [
              "string",
              "null"
            ],
            "description": "Transaction UID. Unique identifier for transaction row. Can be used as key for updates to the row.",
            "example": "TID12345"
          },
          "value": {
            "type": [
              "number",
              "null"
            ],
            "description": "Value of the whole transaction in the location's currency (e.g. \u20ac, \u00a3, $). Value should always be positive. Transaction quantity determines the direction of the transaction.",
            "minimum": 0,
            "example": 33.83
          },
          "partner_code": {
            "type": [
              "string",
              "null"
            ],
            "description": "Defines the partner related to the transaction, usually: -Sales transactions: Customer; -Incoming deliveries: Supplier; -Stock transfers: Sending/receiving warehouse",
            "example": "SUPPLIER1"
          },
          "reference": {
            "type": [
              "string",
              "null"
            ],
            "description": "Sales or purchase order number related to sale or goods receival transaction.",
            "example": "ORDER_12345"
          },
          "order_row": {
            "type": [
              "string",
              "null"
            ],
            "description": "Sales or purchase order row number related to sale or goods receival transaction.",
            "example": "1"
          },
          "order_type": {
            "type": [
              "string",
              "null"
            ],
            "description": "Additional transaction type. E.g. delivery channel for deliveries (from supplier, from DC)",
            "example": "DC"
          },
          "time": {
            "description": "Time of the transaction (24h clock hh:mm)",
            "$ref": "#/components/schemas/time"
          },
          "expiration_date": {
            "type": [
              "string",
              "null"
            ],
            "format": "date",
            "description": "Expiration date of the goods received.",
            "example": "2018-06-01"
          }
        },
        "required": [
          "type",
          "product",
          "location",
          "date",
          "quantity"
        ],
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false
      },
      "retail_inventory_check_request_body": {
        "type": "object",
        "required": [
          "data"
        ],
        "additionalProperties": false,
        "properties": {
          "meta": {
            "type": "object",
            "$ref": "#/components/schemas/inbound_meta"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "$ref": "#/components/schemas/inventory_check"
            }
          }
        }
      },
      "inventory_event": {
        "type": "object",
        "properties": {
          "product": {
            "type": "string",
            "minLength": 1,
            "description": "Product code. Reference to Products.",
            "example": "PRODUCT1"
          },
          "location": {
            "type": "string",
            "minLength": 1,
            "description": "Location code. Reference to Locations.",
            "example": "LOCATION1"
          },
          "balances": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "type",
                "date",
                "balance"
              ],
              "properties": {
                "type": {
                  "type": "string",
                  "minLength": 1,
                  "description": "Supported balance types are: BALANCE = Current physical stock level",
                  "example": "BALANCE",
                  "enum": [
                    "BALANCE"
                  ]
                },
                "date": {
                  "type": "string",
                  "minLength": 1,
                  "format": "date",
                  "description": "Balance date i.e. date of the product-location balance. Previous day's date in the daily transfer. For historical balances the date of the balance.",
                  "example": "2018-09-30"
                },
                "balance": {
                  "type": "number",
                  "description": "Physical balance quantity in the location in base unit of measure (e.g. SKU, stock unit, piece, smallest possible unit). Balance quantity should be always positive and possible reservations are send as open sales orders.",
                  "example": 15
                },
                "value": {
                  "type": [
                    "number",
                    "null"
                  ],
                  "description": "Value of the whole transaction in the location's currency (e.g. \u20ac, \u00a3, $). Value should always be positive as transaction quantity determines the direction of the transaction. Usually based on purchase price. Negative values are automatically converted to the positive absolute value of the inserted value.",
                  "minimum": 0,
                  "example": 29.85
                },
                "time": {
                  "description": "If balances are sent multiple times during the day, indicates the time of the balance information, i.e. when it was fetched from source system",
                  "$ref": "#/components/schemas/time"
                }
              },
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "additionalProperties": false
            }
          },
          "sales": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "type",
                "date",
                "time",
                "quantity"
              ],
              "properties": {
                "type": {
                  "type": "string",
                  "minLength": 1,
                  "description": "Always SALE.",
                  "example": "SALE",
                  "enum": [
                    "SALE"
                  ]
                },
                "date": {
                  "type": "string",
                  "minLength": 1,
                  "format": "date",
                  "description": "Transaction posting date.",
                  "example": "2018-05-01"
                },
                "quantity": {
                  "type": "number",
                  "description": "Transaction quantity in inventory units (e.g. pieces). Quantity sign defines the transaction direction as seen by the warehouse, e.g. outgoing sales is sent as negative quantity. All quantities should be given in base unit of measure (e.g. SKU, stock unit, piece, smallest possible unit).",
                  "example": -1
                },
                "value": {
                  "type": [
                    "number",
                    "null"
                  ],
                  "description": "Value of the whole transaction in the location's currency (e.g.\u00a3, \u20ac, $). Value should always be positive. Transaction quantity determines the direction of the transaction.",
                  "minimum": 0,
                  "example": 7.99
                },
                "time": {
                  "description": "Time of the transaction (24h clock hh:mm)",
                  "pattern": "^(2[0-3]|[01]?[0-9]):([0-5]?[0-9])$",
                  "type": "string",
                  "example": "15:05"
                }
              },
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "additionalProperties": false
            }
          },
          "open_sales_orders": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "type",
                "date",
                "quantity",
                "estimated_date"
              ],
              "properties": {
                "type": {
                  "type": "string",
                  "minLength": 1,
                  "description": "SALES_ORDER = Open sales order",
                  "example": "SALES_ORDER",
                  "enum": [
                    "SALES_ORDER"
                  ]
                },
                "date": {
                  "type": "string",
                  "minLength": 1,
                  "format": "date",
                  "description": "Snapshot's date. The open order row has to be received every day the order remains open. Once it's delivered, the open order row is not sent anymore. For example, if an order is created on Jan 3rd and the snapshot date is Jan 8th, then the date field will contain '2018-01-08' assuming the order is still open Jan 8th. Snapshot's date is usually previous day's date except if reading in historical open orders.",
                  "example": "2018-07-02"
                },
                "quantity": {
                  "type": "number",
                  "description": "Open order quantity in inventory units (e.g. pieces). Quantity sign defines the transaction direction as seen by the warehouse, e.g. outgoing sales order is sent as negative quantity. All quantities should be given in base unit of measure (e.g. SKU, stock unit, piece, smallest possible unit).",
                  "example": -2
                },
                "value": {
                  "type": [
                    "number",
                    "null"
                  ],
                  "description": "Value of the whole transaction in the location's currency (e.g.\u20ac, \u00a3, $). Value should always be positive. Transaction quantity determines the direction of the transaction.",
                  "minimum": 0,
                  "example": 17.98
                },
                "transaction_uid": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "description": "Transaction UID. Unique identifier for transaction row. Can be used as key for updates to the row.",
                  "example": "TID12345"
                },
                "estimated_date": {
                  "type": "string",
                  "format": "date",
                  "description": "Estimated delivery date of the order.",
                  "example": "2018-07-04"
                },
                "order_requested_date": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "format": "date",
                  "description": "Requested delivery date of the order. Can be used for measuring delivery accuracy.",
                  "example": "2019-07-03"
                },
                "reference": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "description": "Sales order number. RELEX uses reference code and order row from Sale & Open sales order in calculating supplier delivery accuracy metrics.",
                  "example": "SO_12345"
                },
                "order_row": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "description": "Sales order row number. RELEX uses reference code and order row from Sale & Open sales order in calculating supplier delivery accuracy metrics.",
                  "example": "2"
                },
                "order_type": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "description": "Additional order type that can be used to distinct normal open orders from special open orders. Special orders are skipped in replenishment calculations. Consider not using these types of orders.",
                  "example": "SPECIAL_SALES_ORDER"
                },
                "partner_code": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "description": "Customer code for sales orders.",
                  "example": "C01234"
                },
                "estimated_delivery_time": {
                  "description": "Estimated delivery time (24h clock hh:mm)",
                  "$ref": "#/components/schemas/time"
                }
              },
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "additionalProperties": false
            }
          },
          "deliveries": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "type",
                "date",
                "quantity"
              ],
              "properties": {
                "type": {
                  "type": "string",
                  "minLength": 1,
                  "description": "Type of the transaction. Always DELIVERY or SPECIAL_DELIVERY.",
                  "example": "DELIVERY",
                  "enum": [
                    "DELIVERY",
                    "SPECIAL_DELIVERY"
                  ]
                },
                "date": {
                  "type": "string",
                  "minLength": 1,
                  "format": "date",
                  "description": "Transaction posting date.",
                  "example": "2018-06-01"
                },
                "quantity": {
                  "type": "number",
                  "description": "Transaction quantity in inventory units (e.g. pieces). Quantity sign defines the transaction direction as seen by the warehouse, e.g. outgoing sales is sent as negative quantity. All quantities should be given in base unit of measure (e.g. SKU, stock unit, piece, smallest possible unit).",
                  "example": 24
                },
                "transaction_uid": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "description": "Transaction UID. Unique identifier for transaction row. Can be used as key for updates to the row.",
                  "example": "TID12345"
                },
                "value": {
                  "type": [
                    "number",
                    "null"
                  ],
                  "description": "Value of the whole transaction in the location's currency (e.g.\u20ac, \u00a3, $). Value should always be positive. (Transaction quantity determines the direction of the transaction.)",
                  "minimum": 0,
                  "example": 47.76
                },
                "reference": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "description": "Purchase order number related to goods receival transaction. RELEX uses reference code and order row from Delivery & Open purchase order in calculating supplier delivery accuracy metrics.",
                  "example": "ORDER_12345"
                },
                "order_row": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "description": "Purchase order row number related to goods receival transaction. RELEX uses reference code and order row from Delivery & Open purchase order in calculating supplier delivery accuracy metrics.",
                  "example": "1"
                },
                "partner_code": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "description": "Supplier code for incoming deliveries.",
                  "example": "SUPPLIER1"
                },
                "time": {
                  "description": "Time of the transaction (24h clock hh:mm)",
                  "$ref": "#/components/schemas/time"
                },
                "order_type": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "description": "Additional transaction type. E.g. delivery channel for deliveries (from supplier, from DC)",
                  "example": "DC"
                },
                "purchase_price": {
                  "type": [
                    "number",
                    "null"
                  ],
                  "description": "Purchase cost of the whole sales transaction",
                  "example": 24
                },
                "expiration_date": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "format": "date",
                  "description": "Expiration date of the goods received.",
                  "example": "2018-06-01"
                }
              },
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "additionalProperties": false
            }
          },
          "open_purchase_orders": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "type",
                "date",
                "quantity",
                "estimated_date"
              ],
              "properties": {
                "type": {
                  "type": "string",
                  "minLength": 1,
                  "description": "ORDER = Open purchase order (can be linked to DELIVERY with a reference number)",
                  "example": "ORDER",
                  "enum": [
                    "ORDER"
                  ]
                },
                "date": {
                  "type": "string",
                  "minLength": 1,
                  "format": "date",
                  "description": "Snapshot's date. The open order row has to be received every day the order remains open. Once it's delivered, the open order row is not sent anymore. For example, if an order is created on Jan 3rd and the snapshot date is Jan 8th, then the date field will contain '2018-01-08' assuming the order is still open Jan 8th. Snapshot's date is usually previous day's date except if reading in historical open orders.",
                  "example": "2018-05-25"
                },
                "quantity": {
                  "type": "number",
                  "description": "Open order quantity in inventory units (e.g. pieces). Quantity sign defines the transaction direction as seen by the warehouse, e.g. incoming purchase order is sent as positive quantity. All quantities should be given in base unit of measure (e.g. SKU, stock unit, piece, smallest possible unit).",
                  "example": 24
                },
                "value": {
                  "type": [
                    "number",
                    "null"
                  ],
                  "description": "Value of the whole transaction in the location's currency (e.g.\u20ac, \u00a3, $). Value should always be positive. Transaction quantity determines the direction of the transaction.",
                  "minimum": 0,
                  "example": 47.76
                },
                "estimated_date": {
                  "type": "string",
                  "format": "date",
                  "description": "Estimated delivery date of the order.",
                  "example": "2018-06-01"
                },
                "order_requested_date": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "format": "date",
                  "description": "Requested delivery date of the order. Can be used for measuring delivery accuracy.",
                  "example": "2019-07-03"
                },
                "reference": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "description": "Purchase order number. RELEX uses reference code and order row from Delivery & Open purchase order in calculating supplier delivery accuracy metrics.",
                  "example": "ORDER_12345"
                },
                "order_row": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "description": "Purchase order row number. RELEX uses reference code and order row from Delivery & Open purchase order in calculating supplier delivery accuracy metrics.",
                  "example": "1"
                },
                "order_proposal_reference": {
                  "type": [
                    "number",
                    "null"
                  ],
                  "description": "RELEX order proposal reference number. The order proposal number sent by RELEX to track open purchase orders.",
                  "example": 5314130
                },
                "transaction_uid": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "description": "Transaction UID. Unique identifier for transaction row. Can be used as key for updates to the row.",
                  "example": "TID12345"
                },
                "order_type": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "description": "Additional order type that can be used to distinct normal open orders from special open orders.",
                  "example": "SPECIAL_PURCHASE_ORDER"
                },
                "partner_code": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "description": "Supplier code for purchase orders.",
                  "example": "SUPPLIER1"
                },
                "estimated_delivery_time": {
                  "description": "Estimated delivery time (24h clock hh:mm)",
                  "$ref": "#/components/schemas/time"
                },
                "expiration_date": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "format": "date",
                  "description": "Expiration date of the goods to be received.",
                  "example": "2020-09-18"
                }
              },
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "additionalProperties": false
            }
          },
          "adjustments": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "type",
                "date",
                "quantity"
              ],
              "properties": {
                "type": {
                  "type": "string",
                  "minLength": 1,
                  "description": "Type of the transaction. Always ADJUSTMENT.",
                  "example": "ADJUSTMENT",
                  "enum": [
                    "ADJUSTMENT"
                  ]
                },
                "date": {
                  "type": "string",
                  "minLength": 1,
                  "format": "date",
                  "description": "Transaction posting date.",
                  "example": "2018-09-16"
                },
                "quantity": {
                  "type": "number",
                  "description": "Transaction quantity in inventory units (e.g. pieces). Quantity sign defines the transaction direction as seen by the warehouse, e.g. outgoing sales is sent as negative quantity. All quantities should be given in base unit of measure (e.g. SKU, stock unit, piece, smallest possible unit).",
                  "example": 1
                },
                "transaction_uid": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "description": "Transaction UID. Unique identifier for transaction row. Can be used as key for updates to the row.",
                  "example": "TID12345"
                },
                "value": {
                  "type": [
                    "number",
                    "null"
                  ],
                  "description": "Value of the whole transaction in the location's currency (e.g. \u20ac, \u00a3, $). Value should always be positive. Transaction quantity determines the direction of the transaction.",
                  "minimum": 0,
                  "example": 1.99
                },
                "time": {
                  "description": "Time of the transaction (24h clock hh:mm)",
                  "$ref": "#/components/schemas/time"
                },
                "partner_code": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "description": "Defines the partner related to the transaction, usually: -Sales transactions: Customer; -Incoming deliveries: Supplier; -Stock transfers: Sending/receiving warehouse",
                  "example": "SUPPLIER1"
                },
                "reference": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "description": "Sales or purchase order number related to sale or goods receival transaction.",
                  "example": "ORDER_12345"
                },
                "order_row": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "description": "Sales or purchase order row number related to sale or goods receival transaction.",
                  "example": "1"
                },
                "order_type": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "description": "Additional transaction type. E.g. delivery channel for deliveries (from supplier, from DC)",
                  "example": "DC"
                },
                "expiration_date": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "format": "date",
                  "description": "Expiration date of the goods received.",
                  "example": "2018-06-01"
                }
              },
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "additionalProperties": false
            }
          }
        },
        "required": [
          "product",
          "location"
        ],
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false
      },
      "retail_inventory_event_request_body": {
        "type": "object",
        "required": [
          "data"
        ],
        "additionalProperties": false,
        "properties": {
          "meta": {
            "type": "object",
            "$ref": "#/components/schemas/inbound_meta"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "array",
              "items": {
                "type": "object",
                "$ref": "#/components/schemas/inventory_event"
              }
            }
          }
        }
      },
      "lost_sale": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "minLength": 1,
            "description": "Type of the transaction. Always LOST_SALE.",
            "example": "LOST_SALE",
            "enum": [
              "LOST_SALE"
            ]
          },
          "product": {
            "type": "string",
            "minLength": 1,
            "description": "Product code. Reference to Products.",
            "example": "PRODUCT1"
          },
          "location": {
            "type": "string",
            "description": "Location code. Reference to Locations.",
            "example": "LOCATION1"
          },
          "date": {
            "type": "string",
            "minLength": 1,
            "format": "date",
            "description": "Transaction posting date.",
            "example": "2018-09-05"
          },
          "quantity": {
            "type": "number",
            "description": "Transaction quantity in inventory units (e.g. pieces). Quantity sign defines the transaction direction as seen by the warehouse, e.g. outgoing sales is sent as negative quantity. All quantities should be given in base unit of measure (e.g. SKU, stock unit, piece, smallest possible unit).",
            "example": 5
          },
          "transaction_uid": {
            "type": [
              "string",
              "null"
            ],
            "description": "Transaction UID. Unique identifier for transaction row. Can be used as key for updates to the row.",
            "example": "TID12345"
          },
          "value": {
            "type": [
              "number",
              "null"
            ],
            "description": "Value of the whole transaction in the location's currency (e.g. \u20ac, \u00a3, $). Value should always be positive. Transaction quantity determines the direction of the transaction.",
            "minimum": 0,
            "example": 44.95
          },
          "purchase_price": {
            "type": [
              "number",
              "null"
            ],
            "description": "Purchase cost of sales transaction - this allows sales margin calculation.",
            "example": 9.95
          },
          "partner_code": {
            "type": [
              "string",
              "null"
            ],
            "description": "Supplier code for incoming deliveries.",
            "example": "SUPPLIER1"
          },
          "reference": {
            "type": [
              "string",
              "null"
            ],
            "description": "Purchase order number related to goods receival transaction. RELEX uses reference code and order row from Delivery & Open purchase order in calculating supplier delivery accuracy metrics.",
            "example": "ORDER_12345"
          },
          "order_row": {
            "type": [
              "string",
              "null"
            ],
            "description": "Purchase order row number related to goods receival transaction. RELEX uses reference code and order row from Delivery & Open purchase order in calculating supplier delivery accuracy metrics.",
            "example": "1"
          },
          "order_type": {
            "type": [
              "string",
              "null"
            ],
            "description": "Additional transaction type. E.g. delivery channel for deliveries (from supplier, from DC)",
            "example": "DC"
          },
          "time": {
            "description": "Time of the transaction (24h clock hh:mm)",
            "$ref": "#/components/schemas/time"
          },
          "expiration_date": {
            "type": [
              "string",
              "null"
            ],
            "format": "date",
            "description": "Expiration date of the goods received.",
            "example": "2018-06-01"
          }
        },
        "required": [
          "type",
          "product",
          "location",
          "date",
          "quantity"
        ],
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false
      },
      "retail_lost_sale_request_body": {
        "type": "object",
        "required": [
          "data"
        ],
        "additionalProperties": false,
        "properties": {
          "meta": {
            "type": "object",
            "$ref": "#/components/schemas/inbound_meta"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "$ref": "#/components/schemas/lost_sale"
            }
          }
        }
      },
      "open_purchase_order": {
        "$comment": "NOTE!! Any changes to this schema MUST BE MADE also in the goods_received.json schema file that contains this schema as a nested property!",
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "minLength": 1,
            "description": "ORDER = Open purchase order (can be linked to DELIVERY with a reference number)",
            "example": "ORDER",
            "enum": [
              "ORDER"
            ]
          },
          "product": {
            "type": "string",
            "minLength": 1,
            "description": "Product code (code for finished product or stock keeping unit). Reference to Products.",
            "example": "PRODUCT1"
          },
          "location": {
            "type": "string",
            "minLength": 1,
            "description": "Inventory location code (i.e. for affected store, warehouse etc.). Reference to Locations.",
            "example": "LOCATION1"
          },
          "date": {
            "type": "string",
            "minLength": 1,
            "format": "date",
            "description": "Snapshot's date. The open order row has to be received every day the order remains open. Once it's delivered, the open order row is not sent anymore. For example, if an order is created on Jan 3rd and the snapshot date is Jan 8th, then the date field will contain '2018-01-08' assuming the order is still open Jan 8th. Snapshot's date is usually previous day's date except if reading in historical open orders.",
            "example": "2018-05-25"
          },
          "quantity": {
            "type": "number",
            "description": "Open order quantity in inventory units (e.g. pieces). Quantity sign defines the transaction direction as seen by the warehouse, e.g. incoming purchase order is sent as positive quantity. All quantities should be given in base unit of measure (e.g. SKU, stock unit, piece, smallest possible unit).",
            "example": 24
          },
          "value": {
            "type": [
              "number",
              "null"
            ],
            "description": "Value of the whole transaction in the location's currency (e.g.\u20ac, \u00a3, $). Value should always be positive. Transaction quantity determines the direction of the transaction.",
            "minimum": 0,
            "example": 47.76
          },
          "estimated_date": {
            "type": "string",
            "format": "date",
            "description": "Estimated delivery date of the order.",
            "example": "2018-06-01"
          },
          "order_requested_date": {
            "type": [
              "string",
              "null"
            ],
            "format": "date",
            "description": "Requested delivery date of the order. Can be used for measuring delivery accuracy.",
            "example": "2019-07-03"
          },
          "reference": {
            "type": [
              "string",
              "null"
            ],
            "description": "Purchase order number. RELEX uses reference code and order row from Delivery & Open purchase order in calculating supplier delivery accuracy metrics.",
            "example": "ORDER_12345"
          },
          "order_row": {
            "type": [
              "string",
              "null"
            ],
            "description": "Purchase order row number. RELEX uses reference code and order row from Delivery & Open purchase order in calculating supplier delivery accuracy metrics.",
            "example": "1"
          },
          "order_proposal_reference": {
            "type": [
              "number",
              "null"
            ],
            "description": "RELEX order proposal reference number. The order proposal number sent by RELEX to track open purchase orders.",
            "example": 5314130
          },
          "transaction_uid": {
            "type": [
              "string",
              "null"
            ],
            "description": "Transaction UID. Unique identifier for transaction row. Can be used as key for updates to the row.",
            "example": "TID12345"
          },
          "order_type": {
            "type": [
              "string",
              "null"
            ],
            "description": "Additional order type that can be used to distinct normal open orders from special open orders.",
            "example": "SPECIAL_PURCHASE_ORDER"
          },
          "partner_code": {
            "type": [
              "string",
              "null"
            ],
            "description": "Supplier code for purchase orders.",
            "example": "SUPPLIER1"
          },
          "estimated_delivery_time": {
            "description": "Estimated delivery time (24h clock hh:mm)",
            "$ref": "#/components/schemas/time"
          },
          "expiration_date": {
            "type": [
              "string",
              "null"
            ],
            "format": "date",
            "description": "Expiration date of the goods to be received.",
            "example": "2020-09-18"
          }
        },
        "required": [
          "type",
          "product",
          "location",
          "date",
          "quantity",
          "estimated_date"
        ],
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false
      },
      "retail_open_purchase_order_request_body": {
        "type": "object",
        "required": [
          "data"
        ],
        "additionalProperties": false,
        "properties": {
          "meta": {
            "type": "object",
            "$ref": "#/components/schemas/inbound_meta"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "$ref": "#/components/schemas/open_purchase_order"
            }
          }
        }
      },
      "open_sales_order": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "minLength": 1,
            "description": "SALES_ORDER = Open sales order",
            "example": "SALES_ORDER",
            "enum": [
              "SALES_ORDER"
            ]
          },
          "product": {
            "type": "string",
            "minLength": 1,
            "description": "Product code (code for finished product or stock keeping unit). Reference to Products.",
            "example": "PRODUCT1"
          },
          "location": {
            "type": "string",
            "minLength": 1,
            "description": "Inventory location code (i.e. for affected store, warehouse etc.). Reference to Locations.",
            "example": "LOCATION1"
          },
          "date": {
            "type": "string",
            "minLength": 1,
            "format": "date",
            "description": "Snapshot's date. The open order row has to be received every day the order remains open. Once it's delivered, the open order row is not sent anymore. For example, if an order is created on Jan 3rd and the snapshot date is Jan 8th, then the date field will contain '2018-01-08' assuming the order is still open Jan 8th. Snapshot's date is usually previous day's date except if reading in historical open orders.",
            "example": "2018-07-02"
          },
          "quantity": {
            "type": "number",
            "description": "Open order quantity in inventory units (e.g. pieces). Quantity sign defines the transaction direction as seen by the warehouse, e.g. outgoing sales order is sent as negative quantity. All quantities should be given in base unit of measure (e.g. SKU, stock unit, piece, smallest possible unit).",
            "example": -2
          },
          "value": {
            "type": [
              "number",
              "null"
            ],
            "description": "Value of the whole transaction in the location's currency (e.g.\u20ac, \u00a3, $). Value should always be positive. Transaction quantity determines the direction of the transaction.",
            "minimum": 0,
            "example": 17.98
          },
          "transaction_uid": {
            "type": [
              "string",
              "null"
            ],
            "description": "Transaction UID. Unique identifier for transaction row. Can be used as key for updates to the row.",
            "example": "TID12345"
          },
          "estimated_date": {
            "type": "string",
            "format": "date",
            "description": "Estimated delivery date of the order.",
            "example": "2018-07-04"
          },
          "order_requested_date": {
            "type": [
              "string",
              "null"
            ],
            "format": "date",
            "description": "Requested delivery date of the order. Can be used for measuring delivery accuracy.",
            "example": "2019-07-03"
          },
          "reference": {
            "type": [
              "string",
              "null"
            ],
            "description": "Sales order number. RELEX uses reference code and order row from Sale & Open sales order in calculating supplier delivery accuracy metrics.",
            "example": "SO_12345"
          },
          "order_row": {
            "type": [
              "string",
              "null"
            ],
            "description": "Sales order row number. RELEX uses reference code and order row from Sale & Open sales order in calculating supplier delivery accuracy metrics.",
            "example": "2"
          },
          "order_type": {
            "type": [
              "string",
              "null"
            ],
            "description": "Additional order type that can be used to distinct normal open orders from special open orders. Special orders are skipped in replenishment calculations. Consider not using these types of orders.",
            "example": "SPECIAL_SALES_ORDER"
          },
          "partner_code": {
            "type": [
              "string",
              "null"
            ],
            "description": "Customer code for sales orders.",
            "example": "C01234"
          },
          "estimated_delivery_time": {
            "description": "Estimated delivery time (24h clock hh:mm)",
            "$ref": "#/components/schemas/time"
          }
        },
        "required": [
          "type",
          "product",
          "location",
          "date",
          "quantity",
          "estimated_date"
        ],
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false
      },
      "retail_open_sales_order_request_body": {
        "type": "object",
        "required": [
          "data"
        ],
        "additionalProperties": false,
        "properties": {
          "meta": {
            "type": "object",
            "$ref": "#/components/schemas/inbound_meta"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "$ref": "#/components/schemas/open_sales_order"
            }
          }
        }
      },
      "order": {
        "type": "object",
        "properties": {
          "product": {
            "type": "string",
            "description": "Product code. Reference to Products.",
            "example": "PRODUCT1",
            "minLength": 1
          },
          "location": {
            "type": "string",
            "description": "Location code. Reference to Locations.",
            "example": "LOCATION1",
            "minLength": 1
          },
          "date": {
            "type": "string",
            "minLength": 1,
            "format": "date",
            "description": "The order date of the order row. Because it is used as a key its value must not be changed when modifying an order.",
            "example": "2022-11-08"
          },
          "quantity": {
            "type": "number",
            "description": "Quantity currently open to be delivered. Used in order proposal calculation.",
            "example": 100
          },
          "requested_quantity": {
            "type": [
              "number",
              "null"
            ],
            "description": "Quantity originally requested to be delivered in order row. Typically effective quantity from order proposal row.",
            "example": 100
          },
          "confirmed_date": {
            "type": [
              "string",
              "null"
            ],
            "minLength": 1,
            "format": "date",
            "description": "Delivery date confirmed by supplier.",
            "example": "2022-12-12"
          },
          "delivered_quantity": {
            "type": [
              "number",
              "null"
            ],
            "description": "Quantity that has been delivered for this order row.",
            "example": 80
          },
          "reference": {
            "type": [
              "string",
              "null"
            ],
            "minLength": 1,
            "description": "Order (header) reference number",
            "example": "PO4233"
          },
          "order_row": {
            "type": [
              "string",
              "null"
            ],
            "description": "Order row number.",
            "example": "1"
          },
          "estimated_date": {
            "type": "string",
            "minLength": 1,
            "format": "date",
            "description": "Currently expected delivery date.",
            "example": "2022-12-17"
          },
          "requested_date": {
            "type": [
              "string",
              "null"
            ],
            "minLength": 1,
            "format": "date",
            "description": "Originally requested delivery date. Typically delivery date from order proposal row according to delivery schedule used in the calculation.",
            "example": "2022-12-10"
          },
          "estimated_delivery_time": {
            "description": "Currently expected delivery time (24h clock hh:mm).",
            "$ref": "#/components/schemas/time"
          },
          "time": {
            "description": "Order time of the order row (24h clock hh:mm).",
            "$ref": "#/components/schemas/time"
          },
          "confirmed_quantity": {
            "type": [
              "number",
              "null"
            ],
            "description": "Quantity currently open to be delivered. Used in order proposal calculation.",
            "example": 100
          },
          "partner_code": {
            "type": [
              "string",
              "null"
            ],
            "minLength": 1,
            "description": "Supplier of the order row",
            "example": "SU4320"
          },
          "order_type": {
            "type": [
              "string",
              "null"
            ],
            "minLength": 1,
            "description": "Free-form text field for defining the order type.",
            "example": "DC_ORDER"
          },
          "value": {
            "type": [
              "number",
              "null"
            ],
            "description": "Monetary value (in currency) of the order row.",
            "example": 200
          },
          "delivered_date": {
            "type": [
              "string",
              "null"
            ],
            "minLength": 1,
            "format": "date",
            "description": "Actual realized date when order row was delivered.",
            "example": "2022-12-14"
          },
          "status": {
            "type": [
              "string",
              "null"
            ],
            "minLength": 1,
            "description": "Status of the order row.",
            "example": "OPEN",
            "enum": [
              "CLOSED",
              "CONFIRMED",
              "OPEN",
              "PARTIALLY_DELIVERED",
              null
            ]
          },
          "expiration_date": {
            "type": [
              "string",
              "null"
            ],
            "minLength": 1,
            "format": "date",
            "description": "Expiration date of the goods to be received.",
            "example": "2023-06-06"
          }
        },
        "required": [
          "product",
          "location",
          "date",
          "quantity",
          "estimated_date"
        ],
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false
      },
      "retail_order_request_body": {
        "type": "object",
        "required": [
          "data"
        ],
        "additionalProperties": false,
        "properties": {
          "meta": {
            "type": "object",
            "$ref": "#/components/schemas/inbound_meta"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "$ref": "#/components/schemas/order"
            }
          }
        }
      },
      "sale": {
        "type": "object",
        "properties": {
          "receipt_timestamp": {
            "type": "string",
            "format": "date-time",
            "description": "Closing time of the receipt.",
            "example": "2024-05-29T04:12:15.267Z"
          },
          "receipt_code": {
            "type": "string",
            "description": "Receipt number for normal sales. In case sales transaction fulfils an open sales order (ecom or B2B), the order number of the sales order",
            "example": "6547321564"
          },
          "date": {
            "type": "string",
            "minLength": 1,
            "format": "date",
            "description": "Transaction posting date.",
            "example": "2018-05-01"
          },
          "time": {
            "description": "Time of the transaction (24h clock hh:mm)",
            "pattern": "^(2[0-3]|[01]?[0-9]):([0-5]?[0-9])$",
            "type": "string",
            "example": "15:05"
          },
          "location": {
            "type": "string",
            "description": "Location code. Reference to Locations.",
            "example": "LOCATION1",
            "minLength": 1
          },
          "product": {
            "type": "string",
            "description": "Product code. Reference to Products.",
            "example": "PRODUCT1",
            "minLength": 1
          },
          "quantity": {
            "type": "number",
            "description": "Transaction quantity in inventory units (e.g. pieces). Quantity sign defines the transaction direction as seen by the warehouse, e.g. outgoing sales is sent as negative quantity. All quantities should be given in base unit of measure (e.g. SKU, stock unit, piece, smallest possible unit).",
            "example": -1
          },
          "receipt_row_number": {
            "type": "integer",
            "minimum": 0,
            "description": "Uniquely identifies the row together with the receipt code. Must be non-negative.",
            "example": 1234
          },
          "value": {
            "type": [
              "number",
              "null"
            ],
            "description": "Value of the whole transaction in the location's currency (e.g.\u00a3, \u20ac, $). Value should always be positive. Transaction quantity determines the direction of the transaction.",
            "minimum": 0,
            "example": 7.99
          },
          "sales_value_with_tax": {
            "type": [
              "number",
              "null"
            ],
            "minimum": 0,
            "description": "Value of the whole transaction including sales taxes (VAT) in the location's currency (e.g.\u20ac, \u00a3, $). Value should always be non-negative. (Transaction quantity determines the direction of the transaction.)",
            "example": 17
          },
          "tax_amount": {
            "type": [
              "number",
              "null"
            ],
            "description": "The amount of the tax. Used for tax calulcations in Pricing & Promotions, not needed for F&R.",
            "example": 2
          },
          "sales_tax_rate": {
            "type": [
              "number",
              "null"
            ],
            "description": "Rate of the sales tax, VAT, GST or similar sales-related tax. Used for tax calulcations in Pricing & Promotions, not needed for F&R.",
            "example": 0.12
          },
          "purchase_price": {
            "type": [
              "number",
              "null"
            ],
            "description": "Purchase cost of sales transaction - this allows sales margin calculation.",
            "example": 1.99
          },
          "loyalty_customer_type": {
            "type": [
              "string",
              "null"
            ],
            "description": "Consumer's loyalty level, if any. Can have values such as: \"No\", \"Basic\", \"Gold\", \"Platinum\" but these are not tighly restricted",
            "example": "Platinum"
          },
          "fulfillment_type": {
            "type": [
              "string",
              "null"
            ],
            "description": "The method in which the sale was fulfilled.",
            "example": "Home delivery"
          },
          "delivery_zip_code": {
            "type": [
              "string",
              "null"
            ],
            "description": "ZIP (postal) code of the region to which a delivery is made.",
            "example": "12345"
          },
          "loyalty_customer_zip_code": {
            "type": [
              "string",
              "null"
            ],
            "description": "ZIP (postal) code of the address of a loyalty customer.",
            "example": "12345"
          },
          "campaign_code": {
            "type": [
              "string",
              "null"
            ],
            "description": "In case sales row includes a campaign discount, code of the related campaign. Can include multiple campaign codes separated by comma (,).",
            "example": "May_discount"
          },
          "transaction_campaign_code": {
            "type": [
              "string",
              "null"
            ],
            "description": "Transaction campaign code used for Promotion Planning. In case sales row includes a campaign discount, code of the related campaign. Can include multiple campaign codes separated by comma (,).",
            "example": "May_discount"
          },
          "original_sales_value": {
            "type": [
              "number",
              "null"
            ],
            "description": "The list price of the sales row without campaign or other discounts excluding sales tax",
            "example": 17
          },
          "original_sales_value_with_tax": {
            "type": [
              "number",
              "null"
            ],
            "description": "The list price of the sales row without campaign or other discounts including  sales tax",
            "example": 20
          },
          "promotion_discount": {
            "type": [
              "number",
              "null"
            ],
            "description": "Promotion/campaign discount %.",
            "example": 0.21
          },
          "transaction_promotion_discount": {
            "type": [
              "number",
              "null"
            ],
            "description": "Campaign discount used for Promotion Planning",
            "example": 0.21
          },
          "discount": {
            "type": [
              "number",
              "null"
            ],
            "description": "Non-promotional row discount (%), e.g. markdown or given by sales rep. The reason for the discount can be elaborated in the \"Discount reason\" field..",
            "example": 0.12
          },
          "discount_reason": {
            "type": [
              "string",
              "null"
            ],
            "description": "Reason for row discount",
            "example": "Markdown"
          },
          "checkout_code": {
            "type": [
              "string",
              "null"
            ],
            "description": "Identifier of the checkout where the sale took place. For example cash or cashier number",
            "example": "1"
          },
          "checkout_type": {
            "type": [
              "string",
              "null"
            ],
            "description": "Checkout type, e.g. self-service checkout vs cashier staffed checkout vs service desk",
            "example": "Self-service"
          },
          "partner_code": {
            "type": [
              "string",
              "null"
            ],
            "description": "B2B trading partner to whom goods are sold NOTE: Trading partner must not be individual consumer (i.e. loyalty code), as interface must not contain personal data that may fall under any privacy regulation",
            "example": "C01234"
          },
          "order_type": {
            "type": [
              "string",
              "null"
            ],
            "description": "Additional subtype for sales transactions that can be used to distinct normal sales from special sales and deliveries (e.g. if project sales need to be reported separately from normal sales).",
            "example": "SPECIAL_SALE",
            "enum": [
              "MARKDOWN_SALE",
              "SPECIAL_SALE",
              "UNUSUAL_SALE",
              null
            ]
          },
          "row_timestamp": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "description": "Scanning time of an individual product.",
            "example": "2024-05-29T04:12:15.267Z"
          }
        },
        "required": [
          "date",
          "product",
          "location",
          "time",
          "quantity",
          "receipt_code",
          "receipt_row_number",
          "receipt_timestamp"
        ],
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false
      },
      "retail_sale_request_body": {
        "type": "object",
        "required": [
          "data"
        ],
        "additionalProperties": false,
        "properties": {
          "meta": {
            "type": "object",
            "$ref": "#/components/schemas/inbound_meta"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "$ref": "#/components/schemas/sale"
            }
          }
        }
      },
      "special_delivery": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "minLength": 1,
            "description": "Type of the transaction. Always SPECIAL_DELIVERY.",
            "example": "SPECIAL_DELIVERY",
            "enum": [
              "SPECIAL_DELIVERY"
            ]
          },
          "product": {
            "type": "string",
            "minLength": 1,
            "description": "Product code. Reference to Products.",
            "example": "PRODUCT1"
          },
          "location": {
            "type": "string",
            "minLength": 1,
            "description": "Location code. Reference to Locations.",
            "example": "LOCATION1"
          },
          "date": {
            "type": "string",
            "minLength": 1,
            "format": "date",
            "description": "Transaction posting date.",
            "example": "2018-07-14"
          },
          "quantity": {
            "type": "number",
            "description": "Transaction quantity in inventory units (e.g. pieces). Quantity sign defines the transaction direction as seen by the warehouse, e.g. outgoing sales is sent as negative quantity. All quantities should be given in base unit of measure (e.g. SKU, stock unit, piece, smallest possible unit).",
            "example": 1
          },
          "value": {
            "type": [
              "number",
              "null"
            ],
            "description": "Value of the whole transaction in the location's currency (e.g.\u20ac, \u00a3, $). Value should always be positive. Transaction quantity determines the direction of the transaction.",
            "minimum": 0,
            "example": 1.99
          },
          "partner_code": {
            "type": [
              "string",
              "null"
            ],
            "description": "Supplier code for incoming deliveries.",
            "example": "SUPPLIER1"
          },
          "reference": {
            "type": [
              "string",
              "null"
            ],
            "description": "Purchase order number related to goods receival transaction. RELEX uses reference code and order row from Delivery & Open purchase order in calculating supplier delivery accuracy metrics.",
            "example": "ORDER_12345"
          },
          "order_row": {
            "type": [
              "string",
              "null"
            ],
            "description": "Purchase order row number related to goods receival transaction. RELEX uses reference code and order row from Delivery & Open purchase order in calculating supplier delivery accuracy metrics.",
            "example": "1"
          },
          "order_type": {
            "type": [
              "string",
              "null"
            ],
            "description": "Additional transaction type. E.g. delivery channel for deliveries (from supplier, from DC)",
            "example": "DC"
          },
          "time": {
            "description": "Time of the transaction (24h clock hh:mm)",
            "$ref": "#/components/schemas/time"
          },
          "expiration_date": {
            "type": [
              "string",
              "null"
            ],
            "minLength": 1,
            "format": "date",
            "description": "Expiration date of the goods received.",
            "example": "2018-06-01"
          }
        },
        "required": [
          "type",
          "product",
          "location",
          "date",
          "quantity"
        ],
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false
      },
      "retail_special_delivery_request_body": {
        "type": "object",
        "required": [
          "data"
        ],
        "additionalProperties": false,
        "properties": {
          "meta": {
            "type": "object",
            "$ref": "#/components/schemas/inbound_meta"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "$ref": "#/components/schemas/special_delivery"
            }
          }
        }
      },
      "spoilage": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "minLength": 1,
            "description": "Type of the transaction. Always SPOILAGE.",
            "example": "SPOILAGE",
            "enum": [
              "SPOILAGE"
            ]
          },
          "product": {
            "type": "string",
            "minLength": 1,
            "description": "Product code. Reference to Products.",
            "example": "PRODUCT1"
          },
          "location": {
            "type": "string",
            "minLength": 1,
            "description": "Location code. Reference to Locations.",
            "example": "LOCATION1"
          },
          "date": {
            "type": "string",
            "minLength": 1,
            "format": "date",
            "description": "Transaction posting date.",
            "example": "2018-09-01"
          },
          "quantity": {
            "type": "number",
            "description": "Transaction quantity in inventory units (e.g. pieces). Quantity sign defines the transaction direction as seen by the warehouse, e.g. outgoing sales is sent as negative quantity. All quantities should be given in base unit of measure (e.g. SKU, stock unit, piece, smallest possible unit).",
            "example": -1
          },
          "transaction_uid": {
            "type": [
              "string",
              "null"
            ],
            "description": "Transaction UID. Unique identifier for transaction row. Can be used as key for updates to the row.",
            "example": "TID12345"
          },
          "value": {
            "type": [
              "number",
              "null"
            ],
            "description": "Value of the whole transaction in the location's currency (e.g.\u20ac, \u00a3, $). Value should always be positive. Transaction quantity determines the direction of the transaction.",
            "minimum": 0,
            "example": 1.99
          },
          "time": {
            "description": "Time of the transaction (24h clock hh:mm)",
            "$ref": "#/components/schemas/time"
          },
          "expiration_date": {
            "type": [
              "string",
              "null"
            ],
            "format": "date",
            "description": "Expiration date of the goods received.",
            "example": "2018-06-01"
          }
        },
        "required": [
          "type",
          "product",
          "location",
          "date",
          "quantity"
        ],
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false
      },
      "retail_spoilage_request_body": {
        "type": "object",
        "required": [
          "data"
        ],
        "additionalProperties": false,
        "properties": {
          "meta": {
            "type": "object",
            "$ref": "#/components/schemas/inbound_meta"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "$ref": "#/components/schemas/spoilage"
            }
          }
        }
      },
      "transfer": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "minLength": 1,
            "description": "Type of the transaction. Always TRANSFER.",
            "example": "TRANSFER",
            "enum": [
              "TRANSFER"
            ]
          },
          "product": {
            "type": "string",
            "minLength": 1,
            "description": "Product code. Reference to Products.",
            "example": "PRODUCT1"
          },
          "location": {
            "type": "string",
            "minLength": 1,
            "description": "Location code. Reference to Locations.",
            "example": "LOCATION1"
          },
          "date": {
            "type": "string",
            "minLength": 1,
            "format": "date",
            "description": "Transaction posting date.",
            "example": "2018-07-01"
          },
          "quantity": {
            "type": "number",
            "description": "Transaction quantity in inventory units (e.g. pieces). Quantity sign defines the transaction direction as seen by the warehouse, e.g. outgoing sales is sent as negative quantity. All quantities should be given in base unit of measure (e.g. SKU, stock unit, piece, smallest possible unit).",
            "example": -2
          },
          "transaction_uid": {
            "type": [
              "string",
              "null"
            ],
            "description": "Transaction UID. Unique identifier for transaction row. Can be used as key for updates to the row.",
            "example": "TID12345"
          },
          "value": {
            "type": [
              "number",
              "null"
            ],
            "description": "Value of the whole transaction in the location's currency (e.g.\u20ac, \u00a3, $). Value should always be positive. Transaction quantity determines the direction of the transaction.",
            "minimum": 0,
            "example": 3.98
          },
          "partner_code": {
            "type": [
              "string",
              "null"
            ],
            "description": "Sending/receiving warehouse code for stock transfers.",
            "example": "DC1"
          },
          "reference": {
            "type": [
              "string",
              "null"
            ],
            "description": "Purchase order number related to goods receival transaction. RELEX uses reference code and order row from Delivery & Open purchase order in calculating supplier delivery accuracy metrics.",
            "example": "ORDER_12345"
          },
          "order_row": {
            "type": [
              "string",
              "null"
            ],
            "description": "Purchase order row number related to goods receival transaction. RELEX uses reference code and order row from Delivery & Open purchase order in calculating supplier delivery accuracy metrics.",
            "example": "1"
          },
          "time": {
            "description": "Time of the transaction (24h clock hh:mm)",
            "$ref": "#/components/schemas/time"
          },
          "order_type": {
            "type": [
              "string",
              "null"
            ],
            "description": "Additional transaction type. E.g. delivery channel for deliveries (from supplier, from DC)",
            "example": "DC"
          },
          "purchase_price": {
            "type": [
              "number",
              "null"
            ],
            "description": "Purchase cost of the whole sales transaction",
            "example": 24
          },
          "expiration_date": {
            "type": [
              "string",
              "null"
            ],
            "format": "date",
            "description": "Expiration date of the goods received.",
            "example": "2018-06-01"
          }
        },
        "required": [
          "type",
          "product",
          "location",
          "date",
          "quantity"
        ],
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false
      },
      "retail_transfer_request_body": {
        "type": "object",
        "required": [
          "data"
        ],
        "additionalProperties": false,
        "properties": {
          "meta": {
            "type": "object",
            "$ref": "#/components/schemas/inbound_meta"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "$ref": "#/components/schemas/transfer"
            }
          }
        }
      },
      "retail_assortment": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "minLength": 1,
            "description": "Unique identifier for the assortment.",
            "example": "105040"
          },
          "name": {
            "type": "string",
            "minLength": 1,
            "description": "Name of the assortment.",
            "example": "Breakfast Cereal Urban"
          },
          "merchandising_product_group_5": {
            "type": "string",
            "description": "Reference to the merchandising product group hierarchy. The exact configuration needs to be discussed during implementation.",
            "example": "102009"
          },
          "assortment_type": {
            "type": [
              "string"
            ],
            "description": "The type and specificity of the assortment. Possible values: NONE, ENTERPRISE, CLUSTER, LOCATION.",
            "example": "CLUSTER",
            "enum": [
              "CLUSTER",
              "ENTERPRISE",
              "LOCATION",
              "NONE"
            ]
          },
          "cluster_group": {
            "type": [
              "string",
              "null"
            ],
            "description": "The cluster group that the assortment belongs to.",
            "example": "ABC"
          },
          "cluster": {
            "type": [
              "string",
              "null"
            ],
            "description": "The cluster that the assortment belongs to.",
            "example": "XYZ"
          },
          "start_date": {
            "type": [
              "string",
              "null"
            ],
            "format": "date",
            "description": "Start date for when the assortment is effective.",
            "example": "2021-06-21"
          },
          "end_date": {
            "type": [
              "string",
              "null"
            ],
            "format": "date",
            "description": "End date for when the assortment is effective.",
            "example": "2021-06-22"
          },
          "min_number_of_bays": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Smallest applicable number of bays where this assortment is used.",
            "example": 3
          }
        },
        "required": [
          "code",
          "name",
          "merchandising_product_group_5"
        ],
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false
      },
      "retail_assortment_request_body": {
        "type": "object",
        "required": [
          "data"
        ],
        "additionalProperties": false,
        "properties": {
          "meta": {
            "type": "object",
            "$ref": "#/components/schemas/inbound_meta"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "$ref": "#/components/schemas/retail_assortment"
            }
          }
        }
      },
      "retail_barcode": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "minLength": 1,
            "description": "Item's barcode.",
            "example": "4740050002116"
          },
          "product": {
            "type": "string",
            "minLength": 1,
            "description": "Product code.",
            "example": "58974"
          },
          "ean_batch_size_label": {
            "type": [
              "string",
              "null"
            ],
            "description": "The batch size of the EAN code to distinguish between consumer unit EAN and sales batch size EAN.",
            "example": "10101001"
          },
          "primary_ean": {
            "type": "boolean",
            "description": "Indicator to distinguish the primary EAN code of the product.",
            "example": true
          }
        },
        "required": [
          "code",
          "product"
        ],
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false
      },
      "retail_barcode_request_body": {
        "type": "object",
        "required": [
          "data"
        ],
        "additionalProperties": false,
        "properties": {
          "meta": {
            "type": "object",
            "$ref": "#/components/schemas/inbound_meta"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "$ref": "#/components/schemas/retail_barcode"
            }
          }
        }
      },
      "retail_bill_of_materials": {
        "type": "object",
        "properties": {
          "end_product_code": {
            "type": "string",
            "minLength": 1,
            "description": "Item code of the produced product. Reference to products.",
            "example": "PRODUCT1"
          },
          "component_product_code": {
            "type": "string",
            "minLength": 1,
            "description": "Item code of the component product consumed in the production of the end product. Reference to products.",
            "example": "COMPONENT1"
          },
          "end_location_code": {
            "type": [
              "string",
              "null"
            ],
            "minLength": 1,
            "description": "Location code of the produced end product. Needed in case components are consumed from a location different to where the end product is produced, and in case locations have different bill-of-materials for an end product. Reference to locations.",
            "example": "LOCATION1"
          },
          "component_location_code": {
            "type": [
              "string",
              "null"
            ],
            "minLength": 1,
            "description": "Location code of the component product. Needed if end_location_code given. Reference to locations.",
            "example": "LOCATION2"
          },
          "quantity": {
            "type": "number",
            "description": "Amount of components consumed in producing one base unit of the end product.",
            "example": 2
          },
          "start_date": {
            "type": [
              "string",
              "null"
            ],
            "format": "date",
            "description": "The first day when the bill of materials is considered in calculations.",
            "example": "2018-01-01"
          },
          "end_date": {
            "type": [
              "string",
              "null"
            ],
            "format": "date",
            "description": "The last day when the bill of materials is considered in calculations.",
            "example": "2018-12-31"
          },
          "active": {
            "type": "boolean",
            "description": "Only active records are considered in bill of materials.",
            "example": true
          },
          "yield_percentage": {
            "type": [
              "number",
              "null"
            ],
            "description": "Yield is the percentage of the component product that is effectively utilized for the end product after yield loss.",
            "example": 2
          },
          "yield_quantity": {
            "type": [
              "number",
              "null"
            ],
            "description": "Yielded quantity is the quantity of the component product that is effectively utilized for the end product after yield loss.",
            "example": 1
          }
        },
        "required": [
          "end_product_code",
          "component_product_code",
          "quantity"
        ],
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false
      },
      "retail_bill_of_materials_request_body": {
        "type": "object",
        "required": [
          "data"
        ],
        "additionalProperties": false,
        "properties": {
          "meta": {
            "type": "object",
            "$ref": "#/components/schemas/inbound_meta"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "$ref": "#/components/schemas/retail_bill_of_materials"
            }
          }
        }
      },
      "retail_bracket": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "minLength": 1,
            "description": "Bracket code for a discount bracket attached to a coordination group or supplier-location. ",
            "example": "BR1"
          },
          "bracket_limit": {
            "type": "number",
            "description": "Minimum amount to be ordered in a coordinated order to receive the bracket discount from purchase price for product-locations that are part of the coordinated order. The unit for the bracket limit is defined on coordination group or supplier-location level.",
            "example": 12,
            "minimum": 0
          },
          "bracket_discount": {
            "type": "number",
            "description": "Discount from purchase price that is received if the coordinated order reaches the bracket limit.",
            "example": 0.03,
            "minimum": 0
          },
          "bracket_type": {
            "type": "string",
            "description": "Tells if the bracket is currently active (current) or active only after coordination group or supplier-location level Next bracket start date.",
            "example": "CURRENT",
            "enum": [
              "CURRENT",
              "NEXT"
            ]
          }
        },
        "required": [
          "code",
          "bracket_limit",
          "bracket_discount",
          "bracket_type"
        ],
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false
      },
      "retail_bracket_request_body": {
        "type": "object",
        "required": [
          "data"
        ],
        "additionalProperties": false,
        "properties": {
          "meta": {
            "type": "object",
            "$ref": "#/components/schemas/inbound_meta"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "$ref": "#/components/schemas/retail_bracket"
            }
          }
        }
      },
      "retail_campaign": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "minLength": 1,
            "description": "Code of the campaign.",
            "example": "SHIRTS-2018-Q1"
          },
          "name": {
            "type": "string",
            "description": "Name of the campaign.",
            "example": "Shirt sale"
          },
          "start_date": {
            "type": "string",
            "format": "date",
            "description": "Start date of the campaign.",
            "example": "2018-01-01"
          },
          "end_date": {
            "type": "string",
            "format": "date",
            "description": "End date of the campaign.",
            "example": "2018-03-31"
          },
          "campaign_class": {
            "type": "string",
            "description": "Distinguishes the class of the campaign. -PROMOTION = planned promotional activity -EVENT = Event affecting forecast e.g. Christmas or local concert -MARKDOWN = planned markdown campaign with reduced price -CANNIBALIZATION, HALO = Campaigns to take cannibalization and halo into account -TEMPORARY_STORE_CLOSURE = Location closed due to e.g. renovation naturally changes sales in that location to 0 -OTHER = any other class that is needed",
            "example": "PROMOTION",
            "enum": [
              "CANNIBALIZATION",
              "EVENT",
              "HALO",
              "MARKDOWN",
              "OTHER",
              "PROMOTION",
              "TEMPORARY_STORE_CLOSURE"
            ]
          },
          "category": {
            "type": [
              "string",
              "null"
            ],
            "description": "Category of the campaign.  This is a non-functional field, but can be used to contain useful information about the campaign.",
            "example": "Promotion leaflet"
          },
          "campaign_group": {
            "type": [
              "string",
              "null"
            ],
            "description": "ID of promotion group if promotion belongs to a group.",
            "example": "CG258"
          },
          "campaign_group_name": {
            "type": [
              "string",
              "null"
            ],
            "description": "Promotion group name.",
            "example": "Midsummer campaign"
          },
          "minimum_purchase_quantity": {
            "type": [
              "number",
              "null"
            ],
            "description": "The minimum quantity required for the consumer to purchase to redeem the promotion.",
            "example": 2
          },
          "maximum_purchase_quantity": {
            "type": [
              "number",
              "null"
            ],
            "description": "The upper limit on number of purchased items for the promotion in a consumer basket.",
            "example": 3
          },
          "reward_quantity": {
            "type": [
              "number",
              "null"
            ],
            "description": "The reward quantity consumer gets when redeeming the promotion.",
            "example": 1
          },
          "multiple_quantity": {
            "type": [
              "number",
              "null"
            ],
            "description": "The number of products required to trigger the promotion each time. The same promotion can be redeemed multiple times.",
            "example": 3
          },
          "price_modification_method_code": {
            "type": [
              "string",
              "null"
            ],
            "description": "Price modification method corresponding to the definition of the consumer offer. Possible values:-AMT_OFF = Amount off, -PCT_OFF = Percentage off, -NEW_VALUE = New price, -NO_DISCOUNT = No discount",
            "example": "AMT_OFF",
            "enum": [
              "AMT_OFF",
              "NEW_VALUE",
              "NO_DISCOUNT",
              "PCT_OFF",
              null
            ]
          },
          "price_modification_value": {
            "type": [
              "number",
              "null"
            ],
            "description": "Numeric value of the consumer offer, including tax. Depends on the price modification method code.",
            "example": 0.2
          },
          "state": {
            "type": [
              "string",
              "null"
            ],
            "description": "Set to DELETE to delete the campaign. Otherwise empty.",
            "example": "DELETE"
          }
        },
        "required": [
          "code",
          "name",
          "start_date",
          "end_date",
          "campaign_class"
        ],
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false
      },
      "retail_campaign_request_body": {
        "type": "object",
        "required": [
          "data"
        ],
        "additionalProperties": false,
        "properties": {
          "meta": {
            "type": "object",
            "$ref": "#/components/schemas/inbound_meta"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "$ref": "#/components/schemas/retail_campaign"
            }
          }
        }
      },
      "retail_delete_campaign": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "minLength": 1,
            "description": "Code of the campaign.",
            "example": "SHIRTS-2018-Q1"
          }
        },
        "required": [
          "code"
        ],
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false
      },
      "retail_delete_campaign_request_body": {
        "type": "object",
        "required": [
          "data"
        ],
        "additionalProperties": false,
        "properties": {
          "meta": {
            "type": "object",
            "$ref": "#/components/schemas/inbound_meta"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "$ref": "#/components/schemas/retail_delete_campaign"
            }
          }
        }
      },
      "retail_chain": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "minLength": 1,
            "description": "Chain code.",
            "example": "EAST-MEDIUM"
          },
          "name": {
            "type": "string",
            "description": "Chain name.",
            "example": "Grocery stores inc."
          },
          "country": {
            "type": [
              "string",
              "null"
            ],
            "description": "Country to which a chain belongs to is defined in a Chain file",
            "example": "COUNTRY1"
          }
        },
        "required": [
          "code",
          "name"
        ],
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false
      },
      "retail_chain_request_body": {
        "type": "object",
        "required": [
          "data"
        ],
        "additionalProperties": false,
        "properties": {
          "meta": {
            "type": "object",
            "$ref": "#/components/schemas/inbound_meta"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "$ref": "#/components/schemas/retail_chain"
            }
          }
        }
      },
      "retail_cluster": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "minLength": 1,
            "description": "Cluster code.",
            "example": "URBAN"
          },
          "name": {
            "type": "string",
            "description": "Cluster name.",
            "example": "Urban"
          }
        },
        "required": [
          "code"
        ],
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false
      },
      "retail_cluster_request_body": {
        "type": "object",
        "required": [
          "data"
        ],
        "additionalProperties": false,
        "properties": {
          "meta": {
            "type": "object",
            "$ref": "#/components/schemas/inbound_meta"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "$ref": "#/components/schemas/retail_cluster"
            }
          }
        }
      },
      "retail_cluster_group": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "minLength": 1,
            "description": "Cluster group code.",
            "example": "BREAKFAST CEREAL 2021"
          },
          "name": {
            "type": "string",
            "description": "Cluster group name.",
            "example": "Breakfast Cereal 2021"
          },
          "start_date": {
            "type": [
              "string",
              "null"
            ],
            "format": "date",
            "description": "Start date. If omitted, only one cluster group is in effect at a time.",
            "example": "2021-01-01"
          },
          "end_date": {
            "type": [
              "string",
              "null"
            ],
            "format": "date",
            "description": "End date. If omitted, only one cluster group is in effect at a time.",
            "example": "2021-03-31"
          }
        },
        "required": [
          "code"
        ],
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false
      },
      "retail_cluster_group_request_body": {
        "type": "object",
        "required": [
          "data"
        ],
        "additionalProperties": false,
        "properties": {
          "meta": {
            "type": "object",
            "$ref": "#/components/schemas/inbound_meta"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "$ref": "#/components/schemas/retail_cluster_group"
            }
          }
        }
      },
      "retail_cluster_group_cluster": {
        "type": "object",
        "properties": {
          "cluster_group": {
            "type": "string",
            "minLength": 1,
            "description": "Cluster group code.",
            "example": "BREAKFAST CEREAL 2021"
          },
          "cluster": {
            "type": "string",
            "minLength": 1,
            "description": "Cluster code.",
            "example": "URBAN"
          }
        },
        "required": [
          "cluster_group",
          "cluster"
        ],
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false
      },
      "retail_cluster_group_cluster_request_body": {
        "type": "object",
        "required": [
          "data"
        ],
        "additionalProperties": false,
        "properties": {
          "meta": {
            "type": "object",
            "$ref": "#/components/schemas/inbound_meta"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "$ref": "#/components/schemas/retail_cluster_group_cluster"
            }
          }
        }
      },
      "retail_closed_date": {
        "type": "object",
        "properties": {
          "location": {
            "type": "string",
            "minLength": 1,
            "description": "Location code. Reference to Locations.",
            "example": "LOCATION1"
          },
          "date": {
            "type": "string",
            "minLength": 1,
            "format": "date",
            "description": "A date that is closed or open for deliveries / forecasting / ordering, depending on what selections have been made for the date in question.",
            "example": "2018-09-25"
          },
          "closed_for_ordering": {
            "type": "boolean",
            "description": "Defines if the location is closed for ordering on the defined date. If date is Closed for ordering, then order proposal calculation won't use it as a order date. Instead, the first date before it that is open for ordering will be used as the order date.",
            "example": true
          },
          "closed_for_forecasting": {
            "type": "boolean",
            "description": "Defines if the location is closed for forecasting on the defined date. No forecast will be calculated for dates that are Closed for forecasting. The weekly/monthly forecast is divided on days that are open for forecasting.",
            "example": true
          },
          "closed_for_deliveries": {
            "type": "boolean",
            "description": "Defines if the location is closed for deliveries on the defined date. If a delivery date falls on a closed date that has Closed for deliveries = Yes, then the delivery date is moved to the next date that is open for deliveries. Possible shelving delay does not decrement on dates that are closed for deliveries.",
            "example": false
          }
        },
        "required": [
          "location",
          "date"
        ],
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false
      },
      "retail_closed_date_request_body": {
        "type": "object",
        "required": [
          "data"
        ],
        "additionalProperties": false,
        "properties": {
          "meta": {
            "type": "object",
            "$ref": "#/components/schemas/inbound_meta"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "$ref": "#/components/schemas/retail_closed_date"
            }
          }
        }
      },
      "retail_opening_time": {
        "type": "object",
        "properties": {
          "location": {
            "type": "string",
            "minLength": 1,
            "description": "Location code. Reference to Locations.",
            "example": "DC10001"
          },
          "date": {
            "type": "string",
            "minLength": 1,
            "format": "date",
            "description": "A date for location opening times. To define the date for which the opening times are stored.",
            "example": "2018-09-25"
          },
          "opening_time": {
            "description": "Location opening time on the defined date (24 hour clock hh:mm).",
            "$ref": "#/components/schemas/time"
          },
          "closing_time": {
            "description": "Location closing time on the defined date (24 hour clock hh:mm).",
            "$ref": "#/components/schemas/time"
          }
        },
        "required": [
          "location",
          "date"
        ],
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false
      },
      "retail_opening_time_request_body": {
        "type": "object",
        "required": [
          "data"
        ],
        "additionalProperties": false,
        "properties": {
          "meta": {
            "type": "object",
            "$ref": "#/components/schemas/inbound_meta"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "$ref": "#/components/schemas/retail_opening_time"
            }
          }
        }
      },
      "retail_constraint_group": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "minLength": 1,
            "description": "Constraint group code.",
            "example": "GROUP_1"
          },
          "active": {
            "type": "boolean",
            "description": "Only active constraint groups are considered in calculations.",
            "example": true
          },
          "name": {
            "type": "string",
            "description": "Name of the constraint group",
            "example": "SUPPLY_LIMIT_1"
          },
          "constraint_date_type": {
            "type": "string",
            "minLength": 1,
            "description": "Defines if constraint is on order or delivery date.",
            "example": "ORDER_DATE",
            "enum": [
              "DELIVERY_DATE",
              "ORDER_DATE"
            ]
          },
          "level": {
            "type": "string",
            "minLength": 1,
            "description": "Level describes source of constraint and can be used to build hierarchies together with priority field",
            "example": "SUPPLY",
            "enum": [
              "OTHER",
              "PICKING",
              "SUPPLY"
            ]
          },
          "multiple_constraints": {
            "type": "boolean",
            "description": "Allows or disallows the ordering of multiple maximum constraints in the constrained replenishment calculation.",
            "example": true
          },
          "multiples_max": {
            "type": [
              "number",
              "null"
            ],
            "description": "Determines the maximum number of times the constraints can be extended. It only applies if multiple constraints are enabled. An empty value means that there are no limitations.",
            "example": 3
          },
          "trigger_level": {
            "type": [
              "number",
              "null"
            ],
            "description": "Defines trigger level for constraints.",
            "example": 0.25
          },
          "priority": {
            "type": [
              "number",
              "null"
            ],
            "description": "Priority controls execution order of constraint groups. Higher priority is strict relative to lower priority.",
            "example": 100
          },
          "use_dynamic_limits": {
            "type": "boolean",
            "description": "Use dynamic limits determines whether dynamic constraints are calculated and considered",
            "example": true
          },
          "product": {
            "type": "string",
            "description": "The product that supplies the constraint group. Used in dynamic constraint calculation.",
            "example": "PROD1"
          },
          "supplier": {
            "type": "string",
            "description": "The supplier of the constraint group. Used in dynamic constraint calculation and in determining active constraints for product-locations.",
            "example": "SUPP1"
          },
          "unit": {
            "type": "string",
            "minLength": 1,
            "description": "Unit for constraint group.",
            "example": "PALLET_LAYERS",
            "enum": [
              "BATCHES",
              "BOXES",
              "PALLETS",
              "PALLET_LAYERS",
              "SPACE",
              "UNITS",
              "VALUE",
              "VOLUME",
              "WEIGHT"
            ]
          }
        },
        "required": [
          "code"
        ],
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false
      },
      "retail_constraint_group_request_body": {
        "type": "object",
        "required": [
          "data"
        ],
        "additionalProperties": false,
        "properties": {
          "meta": {
            "type": "object",
            "$ref": "#/components/schemas/inbound_meta"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "$ref": "#/components/schemas/retail_constraint_group"
            }
          }
        }
      },
      "retail_constraint_group_constraint": {
        "type": "object",
        "properties": {
          "constraint_group": {
            "type": "string",
            "minLength": 1,
            "description": "Constraint group code.",
            "example": "GROUP_1"
          },
          "date": {
            "type": "string",
            "format": "date",
            "description": "Date of constraint.",
            "example": "2018-01-01"
          },
          "static_minimum": {
            "type": [
              "number",
              "null"
            ],
            "description": "Static minimum constraint. The minimum amount that must be ordered/delivered for a group on a certain date.",
            "example": 25
          },
          "static_maximum": {
            "type": [
              "number",
              "null"
            ],
            "description": "Static maximum constraint. The maximum amount that can be ordered/delivered for a group on a certain date.",
            "example": 50
          },
          "exact": {
            "type": [
              "number",
              "null"
            ],
            "description": "Exact constraint. The exact amount that should be ordered/delivered for a group on a certain date.",
            "example": 25
          },
          "reserved_amount": {
            "type": [
              "number",
              "null"
            ],
            "description": "Fixed quantity ordered or delivered that consumes constraints in constrained replenishment. This amount is considered in constraints before any new order proposals or projections are calculated. Only positive values are considered.",
            "example": 5
          }
        },
        "required": [
          "constraint_group",
          "date"
        ],
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false
      },
      "retail_constraint_group_constraint_request_body": {
        "type": "object",
        "required": [
          "data"
        ],
        "additionalProperties": false,
        "properties": {
          "meta": {
            "type": "object",
            "$ref": "#/components/schemas/inbound_meta"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "$ref": "#/components/schemas/retail_constraint_group_constraint"
            }
          }
        }
      },
      "retail_coordination_group_bracket": {
        "type": "object",
        "properties": {
          "bracket": {
            "type": "string",
            "minLength": 1,
            "description": "Bracket code.",
            "example": "BR1"
          },
          "coordination_group": {
            "type": "string",
            "minLength": 1,
            "description": "Coordination group code.",
            "example": "FRESH123"
          }
        },
        "required": [
          "bracket",
          "coordination_group"
        ],
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false
      },
      "retail_coordination_group_bracket_request_body": {
        "type": "object",
        "required": [
          "data"
        ],
        "additionalProperties": false,
        "properties": {
          "meta": {
            "type": "object",
            "$ref": "#/components/schemas/inbound_meta"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "$ref": "#/components/schemas/retail_coordination_group_bracket"
            }
          }
        }
      },
      "retail_coordination_group": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "minLength": 1,
            "description": "Coordination group code for Product-Locations ordered with max/min limits in CO-MRP calculation.",
            "example": "FRESH123"
          },
          "value_max": {
            "type": [
              "number",
              "null"
            ],
            "description": "Maximum amount to be ordered from supplier in location's currency in CO-MRP calculation. Purchase price needs to be defined in Product-Locations, else the product-location is not ordered.",
            "example": 15
          },
          "value_min": {
            "type": [
              "number",
              "null"
            ],
            "description": "Minimum amount to be ordered from supplier in location's currency in CO-MRP calculation. Purchase price needs to be defined in Product-Locations, else the product-location is not ordered.",
            "example": 2
          },
          "pallets_max": {
            "type": [
              "number",
              "null"
            ],
            "description": "Maximum number of pallets in CO-MRP calculation. Pallet size must be defined in Product or Product-Locations, else the product-location is not ordered.",
            "example": 1
          },
          "pallets_min": {
            "type": [
              "number",
              "null"
            ],
            "description": "Minimum number of pallets in CO-MRP calculation. Pallet size must be defined in Product or Product-Locations, else the product-location is not ordered.",
            "example": 1
          },
          "volume_max": {
            "type": [
              "number",
              "null"
            ],
            "description": "Maximum volume to be ordered in CO-MRP calculation. Volume must be defined in Product or Product-Locations, else the product-location is not ordered.",
            "example": 500
          },
          "volume_min": {
            "type": [
              "number",
              "null"
            ],
            "description": "Minimum volume to be ordered in CO-MRP calculation. Volume must be defined in Product or Product-Locations, else the product-location is not ordered.",
            "example": 30
          },
          "batches_max": {
            "type": [
              "number",
              "null"
            ],
            "description": "Maximum amount of order batches to be ordered in CO-MRP calculation. Order batch size must be defined in Product or Product-Locations, else it is considered to be 1.",
            "example": 22
          },
          "batches_min": {
            "type": [
              "number",
              "null"
            ],
            "description": "Minimum amount of order batches to be ordered in CO-MRP calculation. Order batch size must be defined in Product or Product-Locations, else it is considered to be 1.",
            "example": 12
          },
          "boxes_max": {
            "type": [
              "number",
              "null"
            ],
            "description": "Maximum amount of boxes to be ordered in CO-MRP calculation. Box size must be defined in Product or Product-Locations, else the product-location is not ordered.",
            "example": 5
          },
          "boxes_min": {
            "type": [
              "number",
              "null"
            ],
            "description": "Minimum amount of boxes to be ordered in CO-MRP calculation. Box size must be defined in Product or Product-Locations, else the product-location is not ordered.",
            "example": 1
          },
          "pallet_layers_max": {
            "type": [
              "number",
              "null"
            ],
            "description": "Maximum amount of pallet layers to be ordered in CO-MRP calculation. Pallet size must be defined in Product or Product-Locations, else the product-location is not ordered.",
            "example": 22
          },
          "pallet_layers_min": {
            "type": [
              "number",
              "null"
            ],
            "description": "Minimum amount of pallet layers to be ordered in CO-MRP calculation. Pallet size must be defined in Product or Product-Locations, else the product-location is not ordered.",
            "example": 8
          },
          "unique_products_max": {
            "type": [
              "number",
              "null"
            ],
            "description": "Maximum number of unique products-locations to be ordered in CO-MRP calculation. No special product/product-location level master data needed to enable the unique product limit.",
            "example": 15
          },
          "unique_products_min": {
            "type": [
              "number",
              "null"
            ],
            "description": "Minimum number of unique products-locations to be ordered in CO-MRP calculation. No special product/product-location level master data needed to enable the unique product limit.",
            "example": 8
          },
          "units_max": {
            "type": [
              "number",
              "null"
            ],
            "description": "Maximum number of inventory units (typically pieces) to be ordered in CO-MRP calculation. No special product/product-location level master data needed to enable the unit limit.",
            "example": 200
          },
          "units_min": {
            "type": [
              "number",
              "null"
            ],
            "description": "Minimum number of inventory units (typically pieces) to be ordered in CO-MRP calculation. No special product/product-location level master data needed to enable the unit limit.",
            "example": 100
          },
          "weight_max": {
            "type": [
              "number",
              "null"
            ],
            "description": "Maximum weight (in weight units defined for each product) to be ordered in CO-MRP calculation. Weight must be defined in Product or Product-Locations, else the product-location is not ordered.",
            "example": 1200
          },
          "weight_min": {
            "type": [
              "number",
              "null"
            ],
            "description": "Minimum weight (in weight units defined for each product) to be ordered in CO-MRP calculation. Weight must be defined in Product or Product-Locations, else the product-location is not ordered.",
            "example": 140
          },
          "bracket_price_limit_unit": {
            "type": [
              "string",
              "null"
            ],
            "description": "The limit unit for brackets attached to the coordination group.",
            "example": "VALUE",
            "enum": [
              "BATCHES",
              "BOXES",
              "PALLETS",
              "PALLET_LAYERS",
              "SPACE",
              "UNITS",
              "VALUE",
              "VOLUME",
              "WEIGHT",
              null
            ]
          },
          "next_bracket_start_date": {
            "type": [
              "string",
              "null"
            ],
            "format": "date",
            "description": "Date when brackets of type Next should be used in order calculation instead of brackets with type Current.",
            "example": "2017-01-01"
          }
        },
        "required": [
          "code"
        ],
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false
      },
      "retail_coordination_group_request_body": {
        "type": "object",
        "required": [
          "data"
        ],
        "additionalProperties": false,
        "properties": {
          "meta": {
            "type": "object",
            "$ref": "#/components/schemas/inbound_meta"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "$ref": "#/components/schemas/retail_coordination_group"
            }
          }
        }
      },
      "retail_country": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "minLength": 1,
            "description": "Country code.",
            "example": "COUNTRY1"
          },
          "name": {
            "type": "string",
            "description": "Country name.",
            "example": "Finland"
          }
        },
        "required": [
          "code",
          "name"
        ],
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false
      },
      "retail_country_request_body": {
        "type": "object",
        "required": [
          "data"
        ],
        "additionalProperties": false,
        "properties": {
          "meta": {
            "type": "object",
            "$ref": "#/components/schemas/inbound_meta"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "$ref": "#/components/schemas/retail_country"
            }
          }
        }
      },
      "retail_date_specific_delivery": {
        "type": "object",
        "properties": {
          "date": {
            "type": "string",
            "minLength": 1,
            "format": "date",
            "description": "Delivery date.",
            "example": "2018-01-01"
          },
          "product": {
            "type": "string",
            "minLength": 1,
            "description": "Product code. Reference to products.",
            "example": "PRODUCT1"
          },
          "location": {
            "type": "string",
            "minLength": 1,
            "description": "Location code. Reference to locations.",
            "example": "LOCATION1"
          },
          "lead_time": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Lead time of the delivery.",
            "example": 3
          },
          "delivery_schedule_code": {
            "type": [
              "string",
              "null"
            ],
            "description": "Delivery schedule code. Reference to delivery schedules.",
            "example": "2017-01-01-2019-01-01_ABCDE"
          },
          "main_delivery_date": {
            "type": "boolean",
            "description": "Defines whether the delivery date is a main delivery date.",
            "example": true
          }
        },
        "required": [
          "date",
          "product",
          "location"
        ],
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false
      },
      "retail_date_specific_delivery_request_body": {
        "type": "object",
        "required": [
          "data"
        ],
        "additionalProperties": false,
        "properties": {
          "meta": {
            "type": "object",
            "$ref": "#/components/schemas/inbound_meta"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "$ref": "#/components/schemas/retail_date_specific_delivery"
            }
          }
        }
      },
      "retail_delivery_schedule": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "minLength": 1,
            "description": "Delivery schedule code. Delivery schedules can be used to define order and delivery days that are considered only on a certain time period.",
            "example": "2017-01-01-2019-01-01_ABCDE"
          },
          "name": {
            "type": "string",
            "minLength": 1,
            "description": "Delivery schedule name.",
            "example": "Schedule ABCDE"
          },
          "start_date": {
            "type": [
              "string",
              "null"
            ],
            "format": "date",
            "description": "Defines the date when the delivery schedule is first considered. Start date is the first order date or first delivery date depending on what is selected in the parameter Start and end date defined as.",
            "example": "2017-01-01"
          },
          "end_date": {
            "type": [
              "string",
              "null"
            ],
            "format": "date",
            "description": "Defines the last date when the delivery schedule is considered. End date is the last order date or last delivery date depending on what is selected in the parameter Start and end date defined as.",
            "example": "2019-01-01"
          },
          "delivery_schedule": {
            "type": "string",
            "description": "Order cycle, if less frequent than every week. Defined by order day, e.g. selection 'Odd weeks' means order proposals on odd week numbers only.",
            "example": "EVEN_WEEKS",
            "enum": [
              "EVEN_WEEKS",
              "EVERY_WEEK",
              "FIRST_FULL_WEEK_OF_EVEN_MONTHS",
              "FIRST_FULL_WEEK_OF_MONTH",
              "FIRST_FULL_WEEK_OF_MONTHS_1_4_7",
              "FIRST_FULL_WEEK_OF_MONTHS_2_5_8",
              "FIRST_FULL_WEEK_OF_MONTHS_3_6_9",
              "FIRST_FULL_WEEK_OF_ODD_MONTHS",
              "LAST_FULL_WEEK_OF_MONTH",
              "NOT_WEEKS_1_5_9",
              "NOT_WEEKS_2_6_10",
              "NOT_WEEKS_3_7_11",
              "NOT_WEEKS_4_8_12",
              "ODD_WEEKS",
              "SECOND_FULL_WEEK_OF_MONTH",
              "THIRD_FULL_WEEK_OF_MONTH",
              "WEEKS_1_4_7",
              "WEEKS_1_5_9",
              "WEEKS_2_5_8",
              "WEEKS_2_6_10",
              "WEEKS_3_6_9",
              "WEEKS_3_7_11",
              "WEEKS_4_8_12"
            ]
          },
          "delivery_time": {
            "type": "string",
            "description": "Determines whether lead time is calculated in calendar days (7-days week), weekdays (5-days week), or open days.",
            "example": "OPEN_DAYS",
            "enum": [
              "FIVE_DAYS_WEEK",
              "OPEN_DAYS",
              "SEVEN_DAYS_WEEK"
            ]
          },
          "start_and_end_date_type": {
            "type": [
              "string",
              "null"
            ],
            "description": "Determines whether Start date and End date are considered as order days or delivery days",
            "example": "ORDERS",
            "enum": [
              "DELIVERIES",
              "ORDERS",
              null
            ]
          },
          "order_0": {
            "type": "boolean",
            "description": "Order on Mondays.",
            "example": true
          },
          "order_1": {
            "type": "boolean",
            "description": "Order on Tuesdays.",
            "example": false
          },
          "order_2": {
            "type": "boolean",
            "description": "Order on Wednesdays.",
            "example": false
          },
          "order_3": {
            "type": "boolean",
            "description": "Order on Thursdays.",
            "example": false
          },
          "order_4": {
            "type": "boolean",
            "description": "Order on Fridays.",
            "example": false
          },
          "order_5": {
            "type": "boolean",
            "description": "Order on Saturdays.",
            "example": false
          },
          "order_6": {
            "type": "boolean",
            "description": "Order on Sundays.",
            "example": false
          },
          "delivery_all": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Delivery lead time for all days.",
            "example": 7
          },
          "delivery_0": {
            "type": [
              "integer",
              "null"
            ],
            "description": "The lead time of the deliver on Monday. If there's no delivery on Monday, leave empty.",
            "example": 4
          },
          "delivery_1": {
            "type": [
              "integer",
              "null"
            ],
            "description": "The lead time of the deliver on Tuesday. If there's no delivery on Tuesday, leave empty.",
            "example": 3
          },
          "delivery_2": {
            "type": [
              "integer",
              "null"
            ],
            "description": "The lead time of the deliver on Wednesday. If there's no delivery on Wednesday, leave empty.",
            "example": 7
          },
          "delivery_3": {
            "type": [
              "integer",
              "null"
            ],
            "description": "The lead time of the deliver on Thursday. If there's no delivery on Thursday, leave empty.",
            "example": 5
          },
          "delivery_4": {
            "type": [
              "integer",
              "null"
            ],
            "description": "The lead time of the deliver on Friday. If there's no delivery on Friday, leave empty.",
            "example": 2
          },
          "delivery_5": {
            "type": [
              "integer",
              "null"
            ],
            "description": "The lead time of the deliver on Saturday. If there's no delivery on Saturday, leave empty.",
            "example": 2
          },
          "delivery_6": {
            "type": [
              "integer",
              "null"
            ],
            "description": "The lead time of the deliver on Sunday. If there's no delivery on Sunday, leave empty.",
            "example": 2
          },
          "main_delivery_date_0": {
            "type": "boolean",
            "description": "Defines whether Monday is a main delivery date. If at least one weekday is set as a main delivery date, other delivery days are considered secondary.",
            "example": true
          },
          "main_delivery_date_1": {
            "type": "boolean",
            "description": "Defines whether Tuesday is a main delivery date. If at least one weekday is set as a main delivery date, other delivery days are considered secondary.",
            "example": false
          },
          "main_delivery_date_2": {
            "type": "boolean",
            "description": "Defines whether Wednesday is a main delivery date. If at least one weekday is set as a main delivery date, other delivery days are considered secondary.",
            "example": false
          },
          "main_delivery_date_3": {
            "type": "boolean",
            "description": "Defines whether Thursday is a main delivery date. If at least one weekday is set as a main delivery date, other delivery days are considered secondary.",
            "example": false
          },
          "main_delivery_date_4": {
            "type": "boolean",
            "description": "Defines whether Friday is a main delivery date. If at least one weekday is set as a main delivery date, other delivery days are considered secondary.",
            "example": false
          },
          "main_delivery_date_5": {
            "type": "boolean",
            "description": "Defines whether Saturday is a main delivery date. If at least one weekday is set as a main delivery date, other delivery days are considered secondary.",
            "example": false
          },
          "main_delivery_date_6": {
            "type": "boolean",
            "description": "Defines whether Sunday is a main delivery date. If at least one weekday is set as a main delivery date, other delivery days are considered secondary.",
            "example": false
          }
        },
        "required": [
          "code",
          "name",
          "delivery_schedule",
          "delivery_time"
        ],
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false
      },
      "retail_delivery_schedule_request_body": {
        "type": "object",
        "required": [
          "data"
        ],
        "additionalProperties": false,
        "properties": {
          "meta": {
            "type": "object",
            "$ref": "#/components/schemas/inbound_meta"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "$ref": "#/components/schemas/retail_delivery_schedule"
            }
          }
        }
      },
      "retail_end_customer": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "minLength": 1,
            "description": "End customer code. End customer is a location supplied by a wholesaler.",
            "example": "5500"
          },
          "address": {
            "type": "string",
            "description": "The address of the end customer.",
            "example": "Postinaival 7"
          },
          "currency": {
            "type": [
              "string",
              "null"
            ],
            "description": "The currency of the end customer",
            "example": "EUR"
          },
          "city": {
            "type": [
              "string",
              "null"
            ],
            "description": "The city of the location.",
            "example": "Albany"
          },
          "state_name": {
            "type": [
              "string",
              "null"
            ],
            "description": "The state of the end customer",
            "example": "New York"
          },
          "timezone": {
            "type": [
              "string",
              "null"
            ],
            "description": "The timezone of the end customer",
            "example": "Europe/Helsinki"
          }
        },
        "required": [
          "code",
          "address"
        ],
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false
      },
      "retail_end_customer_request_body": {
        "type": "object",
        "required": [
          "data"
        ],
        "additionalProperties": false,
        "properties": {
          "meta": {
            "type": "object",
            "$ref": "#/components/schemas/inbound_meta"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "$ref": "#/components/schemas/retail_end_customer"
            }
          }
        }
      },
      "retail_floor_plan": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "minLength": 1,
            "description": "Identifier of the floor plan.",
            "example": "101234"
          },
          "start_date": {
            "type": [
              "string",
              "null"
            ],
            "format": "date",
            "description": "Start date. If omitted, only one floor plan is in effect at a time.",
            "example": "2021-01-01"
          },
          "end_date": {
            "type": [
              "string",
              "null"
            ],
            "format": "date",
            "description": "End date. If omitted, only one floor plan is in effect at a time",
            "example": "2021-03-31"
          },
          "status": {
            "type": [
              "string"
            ],
            "description": "Status if the floor plan. Possible values: LIVE, PLANNED, ARCHIVED",
            "example": "LIVE",
            "enum": [
              "ARCHIVED",
              "LIVE",
              "PLANNED"
            ]
          }
        },
        "required": [
          "code"
        ],
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false
      },
      "retail_floor_plan_request_body": {
        "type": "object",
        "required": [
          "data"
        ],
        "additionalProperties": false,
        "properties": {
          "meta": {
            "type": "object",
            "$ref": "#/components/schemas/inbound_meta"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "$ref": "#/components/schemas/retail_floor_plan"
            }
          }
        }
      },
      "currency": {
        "type": [
          "string",
          "null"
        ],
        "description": "The currency of the value, if the currency can differ from row to row. The preferred method for sending values is to always use standard home currency of the company or the location (in case there are multiple currencies in use).",
        "example": "USD",
        "enum": [
          "AUD",
          "BGN",
          "BRL",
          "CAD",
          "CHF",
          "CNY",
          "CZK",
          "DKK",
          "EUR",
          "GBP",
          "HKD",
          "HRK",
          "HUF",
          "IDR",
          "ILS",
          "INR",
          "ISK",
          "JPY",
          "KRW",
          "MXN",
          "MYR",
          "NOK",
          "NZD",
          "PHP",
          "PLN",
          "RON",
          "RUB",
          "SEK",
          "SGD",
          "THB",
          "TRY",
          "USD",
          "ZAR",
          null
        ]
      },
      "retail_location": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "minLength": 1,
            "description": "Location code. Location is a store, warehouse, or sales channel (when channel forecasting is in use).",
            "example": "5500"
          },
          "name": {
            "type": "string",
            "description": "Location name.",
            "example": "Helsinki",
            "minLength": 1
          },
          "location_type": {
            "type": [
              "string",
              "null"
            ],
            "description": "Defines the location's role in the supply chain: DC (distribution center), store or other",
            "example": "DC",
            "enum": [
              "",
              "CUSTOMER",
              "CUSTOMER_GROUP",
              "DC",
              "E_COMMERCE",
              "MANUFACTURING",
              "OTHER",
              "PLANNING_LEVEL",
              "REGIONAL_DC",
              "STORE",
              null
            ]
          },
          "chain": {
            "type": [
              "string",
              "null"
            ],
            "description": "Chain code of the chain the location belongs to. Reference to Chains.",
            "example": "CHAIN1"
          },
          "country": {
            "type": [
              "string",
              "null"
            ],
            "description": "Two-letter country code of the location. Can also be set in its own interface (linked to chains).",
            "example": "FI"
          },
          "country_name": {
            "type": [
              "string",
              "null"
            ],
            "description": "Name of the country of the location used for Promotion Planing. Can also be set in its own interface (linked to chains).",
            "example": "Finland"
          },
          "longitude": {
            "type": [
              "number",
              "null"
            ],
            "description": "Longitude (in degrees) of the store. Mandatory for weather-based forecasting and map visualizations.",
            "example": 24.938379
          },
          "latitude": {
            "type": [
              "number",
              "null"
            ],
            "description": "Latitude (in degrees) of the store. Mandatory for weather-based forecasting and map visualizations.",
            "example": 60.169857
          },
          "city": {
            "type": [
              "string",
              "null"
            ],
            "description": "The city of the location.",
            "example": "Albany"
          },
          "currency": {
            "description": "Currency that the location uses.",
            "$ref": "#/components/schemas/currency"
          },
          "buying_forbidden": {
            "type": "boolean",
            "description": "Sets the specific locations to purchase prohibition. true = Buying of products in this location has been forbidden, i.e. products in this location will not be ordered; false = Buying of products in this location is allowed",
            "example": false
          },
          "state_name": {
            "type": [
              "string",
              "null"
            ],
            "description": "To link the location to a specific state. This allows different business rules, aggregate views and metrics to be used more easily.",
            "example": "New York"
          },
          "region": {
            "type": [
              "string",
              "null"
            ],
            "description": "The region of the location.",
            "example": "North East"
          },
          "location_opening_date": {
            "type": [
              "string",
              "null"
            ],
            "format": "date",
            "description": "Initial opening date of the location.",
            "example": "2022-01-01"
          },
          "location_closing_date": {
            "type": [
              "string",
              "null"
            ],
            "format": "date",
            "description": "final closing date of the location.",
            "example": "2022-01-02"
          },
          "reference_code": {
            "type": [
              "string",
              "null"
            ],
            "description": "Code of the location used as reference (old) location for new location in sales forecasting..",
            "example": "5591"
          },
          "number_of_checkouts": {
            "type": [
              "number",
              "null"
            ],
            "description": "Number of checkouts in the location.",
            "example": 8
          },
          "store_net_sales_area": {
            "type": [
              "number",
              "null"
            ],
            "description": "The size of the sales floor area in the location (in square metres or square feet).",
            "example": 1500
          },
          "store_size": {
            "type": [
              "number",
              "null"
            ],
            "description": "The total size of the floor area in the location (in square metres or square feet).",
            "example": 1700
          },
          "timezone": {
            "type": [
              "string",
              "null"
            ],
            "description": "Timezone of this location as defined in tz database's TZ identifier..",
            "example": "Europe/Helsinki"
          },
          "postal_code": {
            "type": [
              "string",
              "null"
            ],
            "description": "Postal code or ZIP code belonging to the location.",
            "example": "27301"
          },
          "block_start_date": {
            "type": [
              "string",
              "null"
            ],
            "format": "date",
            "description": "First date of location's block, e.g. store renovation.",
            "example": "2024-12-01"
          },
          "block_end_date": {
            "type": [
              "string",
              "null"
            ],
            "format": "date",
            "description": "Last date of location's block, e.g. store renovation.",
            "example": "2024-12-15"
          }
        },
        "required": [
          "code",
          "name"
        ],
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false
      },
      "retail_location_request_body": {
        "type": "object",
        "required": [
          "data"
        ],
        "additionalProperties": false,
        "properties": {
          "meta": {
            "type": "object",
            "$ref": "#/components/schemas/inbound_meta"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "$ref": "#/components/schemas/retail_location"
            }
          }
        }
      },
      "retail_location_category_cluster_group_cluster": {
        "type": "object",
        "properties": {
          "location": {
            "type": "string",
            "minLength": 1,
            "description": "Location code. Reference to Locations.",
            "example": "LOCATION1"
          },
          "merchandising_product_group_5": {
            "type": "string",
            "minLength": 1,
            "description": "Reference to the merchandising product group hierarchy. The exact configuration needs to be discussed during implementation.",
            "example": "102009"
          },
          "cluster_group": {
            "type": "string",
            "minLength": 1,
            "description": "Cluster group code.",
            "example": "BREAKFAST CEREAL 2021"
          },
          "cluster": {
            "type": "string",
            "minLength": 1,
            "description": "Cluster code.",
            "example": "URBAN"
          }
        },
        "required": [
          "location",
          "merchandising_product_group_5",
          "cluster_group",
          "cluster"
        ],
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false
      },
      "retail_location_category_cluster_group_cluster_request_body": {
        "type": "object",
        "required": [
          "data"
        ],
        "additionalProperties": false,
        "properties": {
          "meta": {
            "type": "object",
            "$ref": "#/components/schemas/inbound_meta"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "$ref": "#/components/schemas/retail_location_category_cluster_group_cluster"
            }
          }
        }
      },
      "retail_location_category_space": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "minLength": 1,
            "description": "Location-category-space code.",
            "example": "ABC10234"
          },
          "location": {
            "type": "string",
            "minLength": 1,
            "description": "Location code. Reference to Locations.",
            "example": "LOCATION1"
          },
          "merchandising_product_group_5": {
            "type": "string",
            "minLength": 1,
            "description": "Reference to the merchandising product group hierarchy. Links the Location Space record to a Category / Merchandising Group. The exact configuration needs to be discussed during implementation.",
            "example": "105040"
          },
          "floor_plan": {
            "type": [
              "string",
              "null"
            ],
            "description": "Floor plan code. Mandatory if location category space is linked to a floor plan. If not, this field should be empty.",
            "example": "101234"
          },
          "start_date": {
            "type": "string",
            "format": "date",
            "description": "Start (live) date of the Location Space record. Should not be provided if linked to floor plan.",
            "example": "2021-01-01"
          },
          "end_date": {
            "type": "string",
            "format": "date",
            "description": "End date of the Location Space record. Should not be provided if linked to floor plan.",
            "example": "2021-03-31"
          },
          "base_depth": {
            "type": [
              "number",
              "null"
            ],
            "description": "Base depth",
            "example": 0.1
          },
          "base_height": {
            "type": [
              "number",
              "null"
            ],
            "description": "Base height",
            "example": 0.1
          },
          "base_width": {
            "type": [
              "number",
              "null"
            ],
            "description": "Base width",
            "example": 0.1
          },
          "planogram_depth": {
            "type": [
              "number",
              "null"
            ],
            "description": "Planogram depth",
            "example": 0.1
          },
          "planogram_height": {
            "type": [
              "number",
              "null"
            ],
            "description": "Planogram height",
            "example": 0.1
          },
          "planogram_width": {
            "type": [
              "number",
              "null"
            ],
            "description": "Planogram width",
            "example": 0.1
          },
          "number_of_bays": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Number of bays for the category within the location.",
            "example": 3
          },
          "number_of_times_in_floor_plan": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Number of times a location space repeats in the floor plan.",
            "example": 2
          }
        },
        "required": [
          "code",
          "location",
          "merchandising_product_group_5",
          "planogram_width",
          "number_of_bays"
        ],
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false
      },
      "retail_location_category_space_request_body": {
        "type": "object",
        "required": [
          "data"
        ],
        "additionalProperties": false,
        "properties": {
          "meta": {
            "type": "object",
            "$ref": "#/components/schemas/inbound_meta"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "$ref": "#/components/schemas/retail_location_category_space"
            }
          }
        }
      },
      "retail_location_category_space_bay": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "minLength": 1,
            "description": "Location-category-space bay code.",
            "example": "ABC10234"
          },
          "location": {
            "type": "string",
            "minLength": 1,
            "description": "Location code. Reference to Locations.",
            "example": "LOCATION1"
          },
          "merchandising_product_group_5": {
            "type": "string",
            "minLength": 1,
            "description": "Reference to the merchandising product group hierarchy. Links the Location Space Bay record to a Category / Merchandising Group. The exact configuration needs to be discussed during implementation.",
            "example": "105040"
          },
          "bay_index": {
            "type": "string",
            "description": "Bay index. The sequence number of the bay within the Location Category Space Bay record.",
            "example": "3"
          },
          "floor_plan": {
            "type": [
              "string",
              "null"
            ],
            "description": "Floor plan code. Reference to floor plans.",
            "example": "101234"
          },
          "location_category_space": {
            "type": "string",
            "minLength": 1,
            "description": "Location category space code. Used to identify record and should comprise of Location code and Merchandising Product Group Code concatenated together.",
            "example": "101234"
          },
          "base_depth": {
            "type": [
              "number",
              "null"
            ],
            "description": "Base depth",
            "example": 0.1
          },
          "base_height": {
            "type": [
              "number",
              "null"
            ],
            "description": "Base height",
            "example": 0.1
          },
          "base_width": {
            "type": [
              "number",
              "null"
            ],
            "description": "Base width",
            "example": 0.1
          },
          "depth": {
            "type": [
              "number",
              "null"
            ],
            "description": "Depth",
            "example": 0.1
          },
          "height": {
            "type": [
              "number",
              "null"
            ],
            "description": "Height",
            "example": 0.1
          },
          "width": {
            "type": [
              "number",
              "null"
            ],
            "description": "Width",
            "example": 0.1
          },
          "notch_gap": {
            "type": [
              "number",
              "null"
            ],
            "description": "Notch gap",
            "example": 0.1
          },
          "notch_height": {
            "type": [
              "number",
              "null"
            ],
            "description": "Notch height",
            "example": 0.1
          },
          "notch_number": {
            "type": [
              "number",
              "null"
            ],
            "description": "Total number of notches in the bay.",
            "example": 0.1
          }
        },
        "required": [
          "code",
          "location",
          "merchandising_product_group_5",
          "bay_index",
          "location_category_space"
        ],
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false
      },
      "retail_location_category_space_bay_request_body": {
        "type": "object",
        "required": [
          "data"
        ],
        "additionalProperties": false,
        "properties": {
          "meta": {
            "type": "object",
            "$ref": "#/components/schemas/inbound_meta"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "$ref": "#/components/schemas/retail_location_category_space_bay"
            }
          }
        }
      },
      "retail_location_category_space_bay_component": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "minLength": 1,
            "description": "Location-category-space bay component code. Can be the same as component index.",
            "example": "ABC10234"
          },
          "bay_index": {
            "type": "string",
            "minLength": 1,
            "description": "Bay index. The sequence number of the bay within the Location Category Space Bay record.",
            "example": "3"
          },
          "component_index": {
            "type": "string",
            "description": "Component index. The sequence number of the component within the Location Category Space Bay Component record.",
            "example": "456"
          },
          "depth": {
            "type": [
              "number",
              "null"
            ],
            "description": "Depth",
            "example": 0.1
          },
          "height": {
            "type": [
              "number",
              "null"
            ],
            "description": "Height",
            "example": 0.1
          },
          "width": {
            "type": [
              "number",
              "null"
            ],
            "description": "Width",
            "example": 0.1
          }
        },
        "required": [
          "code",
          "bay_index",
          "component_index"
        ],
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false
      },
      "retail_location_category_space_bay_component_request_body": {
        "type": "object",
        "required": [
          "data"
        ],
        "additionalProperties": false,
        "properties": {
          "meta": {
            "type": "object",
            "$ref": "#/components/schemas/inbound_meta"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "$ref": "#/components/schemas/retail_location_category_space_bay_component"
            }
          }
        }
      },
      "retail_merchandising_product_group": {
        "type": "object",
        "properties": {
          "code1": {
            "type": "string",
            "minLength": 1,
            "description": "Merchandising product group code (level 1).",
            "example": "10"
          },
          "name1": {
            "type": "string",
            "description": "Merchandising product group name (level 1).",
            "example": "Grocery"
          },
          "type1": {
            "type": [
              "string",
              "null"
            ],
            "description": "Type of the merchandising product group. Possible values: STANDARD, CAMPAIGN, STORE_MANAGED.",
            "example": "Standard",
            "enum": [
              "CAMPAIGN",
              "STANDARD",
              "STORE_MANAGED",
              null
            ]
          },
          "active1": {
            "type": "boolean",
            "description": "Used to set merchandising product group status active or inactive. Defaults to True",
            "example": true
          },
          "code2": {
            "type": "string",
            "minLength": 1,
            "description": "Merchandising product group code (level 2).",
            "example": "1050"
          },
          "name2": {
            "type": [
              "string",
              "null"
            ],
            "description": "Merchandising product group name (level 2).",
            "example": "Dairy"
          },
          "type2": {
            "type": [
              "string",
              "null"
            ],
            "description": "Type of the merchandising product group. Possible values: STANDARD, CAMPAIGN, STORE_MANAGED.",
            "example": "Standard",
            "enum": [
              "CAMPAIGN",
              "STANDARD",
              "STORE_MANAGED",
              null
            ]
          },
          "active2": {
            "type": "boolean",
            "description": "Used to set merchandising product group status active or inactive. Defaults to True",
            "example": true
          },
          "code3": {
            "type": [
              "string",
              "null"
            ],
            "description": "Merchandising product group code (level 3).",
            "example": "105010"
          },
          "name3": {
            "type": [
              "string",
              "null"
            ],
            "description": "Merchandising product group name (level 3).",
            "example": "Yogurt"
          },
          "type3": {
            "type": [
              "string",
              "null"
            ],
            "description": "Type of the merchandising product group. Possible values: STANDARD, CAMPAIGN, STORE_MANAGED.",
            "example": "Standard",
            "enum": [
              "CAMPAIGN",
              "STANDARD",
              "STORE_MANAGED",
              null
            ]
          },
          "active3": {
            "type": "boolean",
            "description": "Used to set merchandising product group status active or inactive. Defaults to True",
            "example": true
          },
          "code4": {
            "type": [
              "string",
              "null"
            ],
            "description": "Merchandising product group code (level 4).",
            "example": "10501011"
          },
          "name4": {
            "type": [
              "string",
              "null"
            ],
            "description": "Merchandising product group name (level 4)."
          },
          "type4": {
            "type": [
              "string",
              "null"
            ],
            "description": "Type of the merchandising product group. Possible values: STANDARD, CAMPAIGN, STORE_MANAGED.",
            "example": "Standard",
            "enum": [
              "CAMPAIGN",
              "STANDARD",
              "STORE_MANAGED",
              null
            ]
          },
          "active4": {
            "type": "boolean",
            "description": "Used to set merchandising product group status active or inactive. Defaults to True",
            "example": false
          },
          "code5": {
            "type": [
              "string",
              "null"
            ],
            "description": "Merchandising product group code (level 5).",
            "example": "1050101120"
          },
          "name5": {
            "type": [
              "string",
              "null"
            ],
            "description": "Merchandising product group name (level 5)."
          },
          "type5": {
            "type": [
              "string",
              "null"
            ],
            "description": "Type of the merchandising product group. Possible values: STANDARD, CAMPAIGN, STORE_MANAGED.",
            "example": "Standard",
            "enum": [
              "CAMPAIGN",
              "STANDARD",
              "STORE_MANAGED",
              null
            ]
          },
          "active5": {
            "type": "boolean",
            "description": "Used to set merchandising product group status active or inactive. Defaults to True",
            "example": false
          }
        },
        "required": [
          "code1",
          "name1",
          "code2",
          "name2"
        ],
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false
      },
      "retail_merchandising_product_group_request_body": {
        "type": "object",
        "required": [
          "data"
        ],
        "additionalProperties": false,
        "properties": {
          "meta": {
            "type": "object",
            "$ref": "#/components/schemas/inbound_meta"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "$ref": "#/components/schemas/retail_merchandising_product_group"
            }
          }
        }
      },
      "retail_supplier_location_bracket": {
        "type": "object",
        "properties": {
          "bracket": {
            "type": "string",
            "minLength": 1,
            "description": "Bracket code.",
            "example": "BR1"
          },
          "location": {
            "type": "string",
            "minLength": 1,
            "description": "Location code. Reference to Locations.",
            "example": "LOCATION1"
          },
          "supplier": {
            "type": "string",
            "minLength": 1,
            "description": "Supplier code. Reference to Suppliers.",
            "example": "SUPPLIER1"
          }
        },
        "required": [
          "bracket",
          "location",
          "supplier"
        ],
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false
      },
      "retail_supplier_location_bracket_request_body": {
        "type": "object",
        "required": [
          "data"
        ],
        "additionalProperties": false,
        "properties": {
          "meta": {
            "type": "object",
            "$ref": "#/components/schemas/inbound_meta"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "$ref": "#/components/schemas/retail_supplier_location_bracket"
            }
          }
        }
      },
      "retail_location_supplier_delivery_schedule": {
        "type": "object",
        "properties": {
          "location": {
            "type": "string",
            "minLength": 1,
            "description": "Location code. Reference to locations.",
            "example": "LOCATION1"
          },
          "supplier": {
            "type": "string",
            "minLength": 1,
            "description": "Supplier code. Reference to suppliers.",
            "example": "SUPPLIER1"
          },
          "delivery_schedule": {
            "type": "string",
            "minLength": 1,
            "description": "Delivery schedule code. Reference to delivery schedules.",
            "example": "2017-01-01-2019-01-01_ABCDE"
          }
        },
        "required": [
          "location",
          "supplier",
          "delivery_schedule"
        ],
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false
      },
      "retail_location_supplier_delivery_schedule_request_body": {
        "type": "object",
        "required": [
          "data"
        ],
        "additionalProperties": false,
        "properties": {
          "meta": {
            "type": "object",
            "$ref": "#/components/schemas/inbound_meta"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "$ref": "#/components/schemas/retail_location_supplier_delivery_schedule"
            }
          }
        }
      },
      "retail_delete_location_supplier_delivery_schedule": {
        "type": "object",
        "properties": {
          "location": {
            "type": "string",
            "minLength": 1,
            "description": "Location code. Reference to locations.",
            "example": "LOCATION1"
          },
          "supplier": {
            "type": "string",
            "minLength": 1,
            "description": "Supplier code. Reference to suppliers.",
            "example": "SUPPLIER1"
          },
          "delivery_schedule": {
            "type": "string",
            "minLength": 1,
            "description": "Delivery schedule code. Reference to delivery schedules.",
            "example": "2017-01-01-2019-01-01_ABCDE"
          }
        },
        "required": [
          "location",
          "supplier",
          "delivery_schedule"
        ],
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false
      },
      "retail_delete_location_supplier_delivery_schedule_request_body": {
        "type": "object",
        "required": [
          "data"
        ],
        "additionalProperties": false,
        "properties": {
          "meta": {
            "type": "object",
            "$ref": "#/components/schemas/inbound_meta"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "$ref": "#/components/schemas/retail_delete_location_supplier_delivery_schedule"
            }
          }
        }
      },
      "retail_supplier_location": {
        "type": "object",
        "properties": {
          "location": {
            "type": "string",
            "minLength": 1,
            "description": "Location code. Reference to Locations.",
            "example": "LOCATION1"
          },
          "supplier": {
            "type": "string",
            "minLength": 1,
            "description": "Supplier code. Reference to Suppliers.",
            "example": "SUPPLIER1"
          },
          "delivery_schedule": {
            "type": [
              "string",
              "null"
            ],
            "description": "Order cycle, if less frequent than every week. Defined by order day, e.g. selection 'Odd weeks' means order proposals on odd week numbers only.",
            "example": "EVEN_WEEKS",
            "enum": [
              "EVEN_WEEKS",
              "EVERY_WEEK",
              "FIRST_FULL_WEEK_OF_EVEN_MONTHS",
              "FIRST_FULL_WEEK_OF_MONTH",
              "FIRST_FULL_WEEK_OF_MONTHS_1_4_7",
              "FIRST_FULL_WEEK_OF_MONTHS_2_5_8",
              "FIRST_FULL_WEEK_OF_MONTHS_3_6_9",
              "FIRST_FULL_WEEK_OF_ODD_MONTHS",
              "LAST_FULL_WEEK_OF_MONTH",
              "NOT_WEEKS_1_5_9",
              "NOT_WEEKS_2_6_10",
              "NOT_WEEKS_3_7_11",
              "NOT_WEEKS_4_8_12",
              "ODD_WEEKS",
              "SECOND_FULL_WEEK_OF_MONTH",
              "THIRD_FULL_WEEK_OF_MONTH",
              "WEEKS_1_4_7",
              "WEEKS_1_5_9",
              "WEEKS_2_5_8",
              "WEEKS_2_6_10",
              "WEEKS_3_6_9",
              "WEEKS_3_7_11",
              "WEEKS_4_8_12",
              null
            ]
          },
          "delivery_time": {
            "type": [
              "string",
              "null"
            ],
            "description": "Determines whether lead time is calculated in calendar days (7-days week), weekdays (5-days week), or open days.",
            "example": "SEVEN_DAYS_WEEK",
            "enum": [
              "FIVE_DAYS_WEEK",
              "OPEN_DAYS",
              "SEVEN_DAYS_WEEK",
              null
            ]
          },
          "order_0": {
            "type": "boolean",
            "description": "Order on Mondays.",
            "example": true
          },
          "order_1": {
            "type": "boolean",
            "description": "Order on Tuesdays.",
            "example": false
          },
          "order_2": {
            "type": "boolean",
            "description": "Order on Wednesdays.",
            "example": false
          },
          "order_3": {
            "type": "boolean",
            "description": "Order on Thursdays.",
            "example": false
          },
          "order_4": {
            "type": "boolean",
            "description": "Order on Fridays.",
            "example": false
          },
          "order_5": {
            "type": "boolean",
            "description": "Order on Saturdays.",
            "example": false
          },
          "order_6": {
            "type": "boolean",
            "description": "Order on Sundays.",
            "example": false
          },
          "delivery_all": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Delivery lead time for all days.",
            "example": 5
          },
          "delivery_0": {
            "type": [
              "integer",
              "null"
            ],
            "description": "The lead time of the deliver on Monday. If there's no delivery on Monday, leave empty.",
            "example": 2
          },
          "delivery_1": {
            "type": [
              "integer",
              "null"
            ],
            "description": "The lead time of the deliver on Tuesday. If there's no delivery on Tuesday, leave empty.",
            "example": 2
          },
          "delivery_2": {
            "type": [
              "integer",
              "null"
            ],
            "description": "The lead time of the deliver on Wednesday. If there's no delivery on Wednesday, leave empty.",
            "example": 3
          },
          "delivery_3": {
            "type": [
              "integer",
              "null"
            ],
            "description": "The lead time of the deliver on Thursday. If there's no delivery on Thursday, leave empty.",
            "example": 4
          },
          "delivery_4": {
            "type": [
              "integer",
              "null"
            ],
            "description": "The lead time of the deliver on Friday. If there's no delivery on Friday, leave empty.",
            "example": 2
          },
          "delivery_5": {
            "type": [
              "integer",
              "null"
            ],
            "description": "The lead time of the deliver on Saturday. If there's no delivery on Saturday, leave empty.",
            "example": 2
          },
          "delivery_6": {
            "type": [
              "integer",
              "null"
            ],
            "description": "The lead time of the deliver on Sunday. If there's no delivery on Sunday, leave empty.",
            "example": 1
          },
          "value_max": {
            "type": [
              "number",
              "null"
            ],
            "description": "Maximum amount to be ordered from supplier in location's currency.",
            "example": 6000
          },
          "value_min": {
            "type": [
              "number",
              "null"
            ],
            "description": "Minimum amount to be ordered from supplier in location's currency.",
            "example": 1000
          },
          "pallets_max": {
            "type": [
              "number",
              "null"
            ],
            "description": "Maximum number of pallets.",
            "example": 20
          },
          "pallets_min": {
            "type": [
              "number",
              "null"
            ],
            "description": "Minimum number of pallets.",
            "example": 2
          },
          "volume_max": {
            "type": [
              "number",
              "null"
            ],
            "description": "Maximum volume to be ordered.",
            "example": 40
          },
          "volume_min": {
            "type": [
              "number",
              "null"
            ],
            "description": "Minimum volume to be ordered.",
            "example": 5
          },
          "bracket_price_limit_unit": {
            "type": [
              "string",
              "null"
            ],
            "minLength": 1,
            "description": "Bracket price limit unit.",
            "example": "VALUE",
            "enum": [
              "BATCHES",
              "BOXES",
              "PALLETS",
              "PALLET_LAYERS",
              "SPACE",
              "UNITS",
              "VALUE",
              "VOLUME",
              "WEIGHT",
              null
            ]
          },
          "next_bracket_start_date": {
            "type": [
              "string",
              "null"
            ],
            "minLength": 1,
            "format": "date",
            "description": "Next bracket start date.",
            "example": "2018-07-01"
          }
        },
        "required": [
          "location",
          "supplier"
        ],
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false
      },
      "retail_supplier_location_request_body": {
        "type": "object",
        "required": [
          "data"
        ],
        "additionalProperties": false,
        "properties": {
          "meta": {
            "type": "object",
            "$ref": "#/components/schemas/inbound_meta"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "$ref": "#/components/schemas/retail_supplier_location"
            }
          }
        }
      },
      "retail_supplier_location_closure": {
        "type": "object",
        "properties": {
          "location": {
            "type": "string",
            "minLength": 1,
            "description": "Location code. Reference to Locations.",
            "example": "LOCATION1"
          },
          "supplier": {
            "type": "string",
            "minLength": 1,
            "description": "Supplier code. Reference to Suppliers.",
            "example": "SUPPLIER1"
          },
          "date": {
            "type": "string",
            "minLength": 1,
            "format": "date",
            "description": "Supplier closed date. Each supplier closed date needs to have a row and it is not possible to define this by a range.",
            "example": "2024-09-23"
          },
          "closed": {
            "type": "boolean",
            "description": "Defines if supplier is open or closed.",
            "example": true
          }
        },
        "required": [
          "location",
          "supplier",
          "date",
          "closed"
        ],
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false
      },
      "retail_supplier_location_closure_request_body": {
        "type": "object",
        "required": [
          "data"
        ],
        "additionalProperties": false,
        "properties": {
          "meta": {
            "type": "object",
            "$ref": "#/components/schemas/inbound_meta"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "$ref": "#/components/schemas/retail_supplier_location_closure"
            }
          }
        }
      },
      "retail_pre_pack_variant": {
        "type": "object",
        "properties": {
          "pre_pack_product_code": {
            "type": "string",
            "minLength": 1,
            "description": "Identifier for the pre-pack.",
            "example": "72681"
          },
          "variant_product_code": {
            "type": "string",
            "minLength": 1,
            "description": "Identifier of the product/item included in the prepack.",
            "example": "57843"
          },
          "variant_quantity": {
            "type": [
              "number",
              "null"
            ],
            "description": "Quantity of the variant inside the pre-pack.",
            "example": 3
          }
        },
        "required": [
          "pre_pack_product_code",
          "variant_product_code",
          "variant_quantity"
        ],
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false
      },
      "retail_pre_pack_variant_request_body": {
        "type": "object",
        "required": [
          "data"
        ],
        "additionalProperties": false,
        "properties": {
          "meta": {
            "type": "object",
            "$ref": "#/components/schemas/inbound_meta"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "$ref": "#/components/schemas/retail_pre_pack_variant"
            }
          }
        }
      },
      "retail_delete_pre_pack_variant": {
        "type": "object",
        "properties": {
          "pre_pack_product_code": {
            "type": "string",
            "minLength": 1,
            "description": "Prepack product code.",
            "example": "72681"
          },
          "variant_product_code": {
            "type": "string",
            "minLength": 1,
            "description": "Variant product code.",
            "example": "57843"
          }
        },
        "required": [
          "pre_pack_product_code",
          "variant_product_code"
        ],
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false
      },
      "retail_delete_pre_pack_variant_request_body": {
        "type": "object",
        "required": [
          "data"
        ],
        "additionalProperties": false,
        "properties": {
          "meta": {
            "type": "object",
            "$ref": "#/components/schemas/inbound_meta"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "$ref": "#/components/schemas/retail_delete_pre_pack_variant"
            }
          }
        }
      },
      "retail_price_calendar": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "minLength": 1,
            "description": "Unique identifier of the price calendar.",
            "example": "100100100"
          },
          "name": {
            "type": "string",
            "description": "Name of the price calendar.",
            "example": "Prices 2021"
          },
          "start_date": {
            "type": "string",
            "format": "date",
            "description": "Start date.",
            "example": "2018-01-01"
          },
          "end_date": {
            "type": "string",
            "format": "date",
            "description": "End date.",
            "example": "2018-03-31"
          },
          "sales_price": {
            "type": "number",
            "description": "Sales price used during the active period without sales tax e.g. VAT.",
            "minimum": 0,
            "example": 1.99
          },
          "sales_price_with_vat": {
            "type": "number",
            "description": "Sales price used during the active period with sales tax e.g. VAT.",
            "minimum": 0,
            "example": 1.99
          },
          "price_type": {
            "type": "string",
            "description": "Label to indicate if the price is a normal or discounted price: -NORMAL: Price is the normal list price for the product; -DISCOUNT: Price is from a discount, e.g. for a promotion; -ANCHOR: Price represents an anchor price for e.g. price index calculation. Not used in normal setups; -OTHER: Can be used for other labelling purposes.",
            "example": "NORMAL",
            "enum": [
              "ANCHOR",
              "DISCOUNT",
              "NORMAL",
              "OTHER"
            ]
          }
        },
        "required": [
          "code",
          "name",
          "start_date",
          "end_date",
          "sales_price",
          "sales_price_with_vat",
          "price_type"
        ],
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false
      },
      "retail_price_calendar_request_body": {
        "type": "object",
        "required": [
          "data"
        ],
        "additionalProperties": false,
        "properties": {
          "meta": {
            "type": "object",
            "$ref": "#/components/schemas/inbound_meta"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "$ref": "#/components/schemas/retail_price_calendar"
            }
          }
        }
      },
      "retail_batch_size": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "minLength": 1,
            "description": "Code for the batch-size. Can be created by concatenating the product code and the batch size, e.g. \"PRODUCT1/2.0\", or the description, e.g. \"PRODUCT1/Box\".",
            "example": "5789/BOX"
          },
          "product": {
            "type": "string",
            "minLength": 1,
            "description": "Product code. Reference to products.",
            "example": "5789"
          },
          "batch_size": {
            "type": "number",
            "description": "Batch size quantity in product's base unit of measure",
            "example": 10
          },
          "price": {
            "type": [
              "number",
              "null"
            ],
            "description": "Purchase price of one inventory unit in the batch size",
            "example": 5
          },
          "dc_product_code": {
            "type": [
              "string",
              "null"
            ],
            "description": "Product code in DC for the specific batch size",
            "example": "1001"
          },
          "description": {
            "type": [
              "string",
              "null"
            ],
            "description": "Written description of the batch size.",
            "example": "BOX."
          },
          "batch_size_label": {
            "type": [
              "string",
              "null"
            ],
            "description": "Label (ISO/ERP code) of the product batch size.",
            "example": "PC"
          },
          "length": {
            "type": [
              "number",
              "null"
            ],
            "description": "Length of this product batch size.",
            "example": 2
          },
          "width": {
            "type": [
              "number",
              "null"
            ],
            "description": "Width of this product batch size.",
            "example": 4
          },
          "height": {
            "type": [
              "number",
              "null"
            ],
            "description": "Height of this product batch size.",
            "example": 1
          },
          "dimension_unit": {
            "type": [
              "string",
              "null"
            ],
            "description": "Batch dimension unit. Unit in which batch size length, width, and height is defined.",
            "example": "CM"
          },
          "weight": {
            "type": [
              "number",
              "null"
            ],
            "description": "Weight of this product batch size.",
            "example": 1
          },
          "weight_unit": {
            "type": [
              "string",
              "null"
            ],
            "description": "Batch weight unit. Name of the weight unit used for this batch size.",
            "example": "KG"
          }
        },
        "required": [
          "code",
          "product",
          "batch_size"
        ],
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false
      },
      "retail_batch_size_request_body": {
        "type": "object",
        "required": [
          "data"
        ],
        "additionalProperties": false,
        "properties": {
          "meta": {
            "type": "object",
            "$ref": "#/components/schemas/inbound_meta"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "$ref": "#/components/schemas/retail_batch_size"
            }
          }
        }
      },
      "retail_delete_batch_size": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "minLength": 1,
            "description": "Code for the product batch-size. Can be created by concatenating the product code and the batch size, e.g. \"PRODUCT1/2.0\", or the description, e.g. \"PRODUCT1/Box\".",
            "example": "PRODUCT1/Box"
          },
          "product": {
            "type": "string",
            "minLength": 1,
            "description": "Product code. Reference to products.",
            "example": "PRODUCT1"
          }
        },
        "required": [
          "code",
          "product"
        ],
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false
      },
      "retail_delete_batch_size_request_body": {
        "type": "object",
        "required": [
          "data"
        ],
        "additionalProperties": false,
        "properties": {
          "meta": {
            "type": "object",
            "$ref": "#/components/schemas/inbound_meta"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "$ref": "#/components/schemas/retail_delete_batch_size"
            }
          }
        }
      },
      "retail_product_end_customer": {
        "type": "object",
        "properties": {
          "end_customer": {
            "type": "string",
            "minLength": 1,
            "description": "End customer code. End customer is a location supplied by a wholesaler.",
            "example": "5500"
          },
          "product": {
            "type": "string",
            "minLength": 1,
            "description": "Unique identifier of the product.",
            "example": "80980"
          }
        },
        "required": [
          "end_customer",
          "product"
        ],
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false
      },
      "retail_product_end_customer_request_body": {
        "type": "object",
        "required": [
          "data"
        ],
        "additionalProperties": false,
        "properties": {
          "meta": {
            "type": "object",
            "$ref": "#/components/schemas/inbound_meta"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "$ref": "#/components/schemas/retail_product_end_customer"
            }
          }
        }
      },
      "retail_product_class": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "minLength": 1,
            "description": "Product class code.",
            "example": "SEGMENT_1_ABC_SPRING"
          },
          "name": {
            "type": [
              "string",
              "null"
            ],
            "description": "Product class name.",
            "example": "Product class 1, segment ABC, spring"
          },
          "season_start_date": {
            "type": [
              "string",
              "null"
            ],
            "format": "date",
            "description": "Season start date of product class. Information only, not used in any calculations. The year from the date will be ignored in order to enable seasonality over multiple years.",
            "example": "2000-01-01"
          },
          "season_end_date": {
            "type": [
              "string",
              "null"
            ],
            "format": "date",
            "description": "Season end date of product class. Information only, not used in any calculations. The year from the date will be ignored in order to enable seasonality over multiple years.",
            "example": "2000-05-31"
          }
        },
        "required": [
          "code"
        ],
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false
      },
      "retail_product_class_request_body": {
        "type": "object",
        "required": [
          "data"
        ],
        "additionalProperties": false,
        "properties": {
          "meta": {
            "type": "object",
            "$ref": "#/components/schemas/inbound_meta"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "$ref": "#/components/schemas/retail_product_class"
            }
          }
        }
      },
      "retail_product_group": {
        "type": "object",
        "properties": {
          "code1": {
            "type": "string",
            "minLength": 1,
            "description": "Product group code (level 1).",
            "example": "A1"
          },
          "name1": {
            "type": "string",
            "description": "Product group name (level 1). If product group name is needed in multiple localizations, it is possible to use field name_{language}, e.g. name_es1 for spanish or name_en for english. The full list of available localization options is in the Localization of names section.",
            "example": "Dairy products"
          },
          "code2": {
            "type": [
              "string",
              "null"
            ],
            "description": "Product group code (level 2).",
            "example": "A12"
          },
          "name2": {
            "type": [
              "string",
              "null"
            ],
            "description": "Product group name (level 2). If product group name is needed in multiple localizations, it is possible to use field name_{language}, e.g. name_es2 for spanish or name_en for english. The full list of available localization options is in the Localization of names section.",
            "example": "Drinkable milk"
          },
          "code3": {
            "type": [
              "string",
              "null"
            ],
            "description": "Product group code (level 3).",
            "example": "A123"
          },
          "name3": {
            "type": [
              "string",
              "null"
            ],
            "description": "Product group name (level 3). If product group name is needed in multiple localizations, it is possible to use field name_{language}, e.g. name_es3 for spanish or name_en for english. The full list of available localization options is in the Localization of names section.",
            "example": "Organic milk"
          },
          "code4": {
            "type": [
              "string",
              "null"
            ],
            "description": "Product group code (level 4).",
            "example": "A1234"
          },
          "name4": {
            "type": [
              "string",
              "null"
            ],
            "description": "Product group name (level 4). If product group name is needed in multiple localizations, it is possible to use field name_{language}, e.g. name_es4 for spanish or name_en for english. The full list of available localization options is in the Localization of names section.",
            "example": "Level 4 name"
          },
          "code5": {
            "type": [
              "string",
              "null"
            ],
            "description": "Product group code (level 5).",
            "example": "A12345"
          },
          "name5": {
            "type": [
              "string",
              "null"
            ],
            "description": "Product group name (level 5). If product group name is needed in multiple localizations, it is possible to use field name_{language}, e.g. name_es5 for spanish or name_en for english. The full list of available localization options is in the Localization of names section.",
            "example": "Level 5 name"
          },
          "code6": {
            "type": [
              "string",
              "null"
            ],
            "description": "Product group code (level 6).",
            "example": "A123456"
          },
          "name6": {
            "type": [
              "string",
              "null"
            ],
            "description": "Product group name (level 6). If product group name is needed in multiple localizations, it is possible to use field name_{language}, e.g. name_es6 for spanish or name_en for english. The full list of available localization options is in the Localization of names section.",
            "example": "Level 6 name"
          },
          "code7": {
            "type": [
              "string",
              "null"
            ],
            "description": "Product group code (level 7).",
            "example": "A1234567"
          },
          "name7": {
            "type": [
              "string",
              "null"
            ],
            "description": "Product group name (level 7). If product group name is needed in multiple localizations, it is possible to use field name_{language}, e.g. name_es7 for spanish or name_en for english. The full list of available localization options is in the Localization of names section.",
            "example": "Level 7 name"
          },
          "code8": {
            "type": [
              "string",
              "null"
            ],
            "description": "Product group code (level 8).",
            "example": "A12345678"
          },
          "name8": {
            "type": [
              "string",
              "null"
            ],
            "description": "Product group name (level 8). If product group name is needed in multiple localizations, it is possible to use field name_{language}, e.g. name_es8 for spanish or name_en for english. The full list of available localization options is in the Localization of names section.",
            "example": "Level 8 name"
          },
          "code9": {
            "type": [
              "string",
              "null"
            ],
            "description": "Product group code (level 9).",
            "example": "A123456789"
          },
          "name9": {
            "type": [
              "string",
              "null"
            ],
            "description": "Product group name (level 9). If product group name is needed in multiple localizations, it is possible to use field name_{language}, e.g. name_es9 for spanish or name_en for english. The full list of available localization options is in the Localization of names section.",
            "example": "Level 9 name"
          },
          "code10": {
            "type": [
              "string",
              "null"
            ],
            "description": "Product group code (level 10).",
            "example": "A123456789"
          },
          "name10": {
            "type": [
              "string",
              "null"
            ],
            "description": "Product group name (level 10). If product group name is needed in multiple localizations, it is possible to use field name_{language}, e.g. name_es10 for spanish or name_en for english. The full list of available localization options is in the Localization of names section.",
            "example": "Level 10 name"
          },
          "code11": {
            "type": [
              "string",
              "null"
            ],
            "description": "Product group code (level 11).",
            "example": "A123456789"
          },
          "name11": {
            "type": [
              "string",
              "null"
            ],
            "description": "Product group name (level 11). If product group name is needed in multiple localizations, it is possible to use field name_{language}, e.g. name_es11 for spanish or name_en for english. The full list of available localization options is in the Localization of names section.",
            "example": "Level 11 name"
          },
          "code12": {
            "type": [
              "string",
              "null"
            ],
            "description": "Product group code (level 12).",
            "example": "A123456789"
          },
          "name12": {
            "type": [
              "string",
              "null"
            ],
            "description": "Product group name (level 12). If product group name is needed in multiple localizations, it is possible to use field name_{language}, e.g. name_es12 for spanish or name_en for english. The full list of available localization options is in the Localization of names section.",
            "example": "Level 12 name"
          },
          "code13": {
            "type": [
              "string",
              "null"
            ],
            "description": "Product group code (level 13).",
            "example": "A123456789"
          },
          "name13": {
            "type": [
              "string",
              "null"
            ],
            "description": "Product group name (level 13). If product group name is needed in multiple localizations, it is possible to use field name_{language}, e.g. name_es13 for spanish or name_en for english. The full list of available localization options is in the Localization of names section.",
            "example": "Level 13 name"
          },
          "code14": {
            "type": [
              "string",
              "null"
            ],
            "description": "Product group code (level 14).",
            "example": "A123456789"
          },
          "name14": {
            "type": [
              "string",
              "null"
            ],
            "description": "Product group name (level 14). If product group name is needed in multiple localizations, it is possible to use field name_{language}, e.g. name_es14 for spanish or name_en for english. The full list of available localization options is in the Localization of names section.",
            "example": "Level 14 name"
          },
          "code15": {
            "type": [
              "string",
              "null"
            ],
            "description": "Product group code (level 15).",
            "example": "A123456789"
          },
          "name15": {
            "type": [
              "string",
              "null"
            ],
            "description": "Product group name (level 15). If product group name is needed in multiple localizations, it is possible to use field name_{language}, e.g. name_es15 for spanish or name_en for english. The full list of available localization options is in the Localization of names section.",
            "example": "Level 15 name"
          }
        },
        "required": [
          "code1",
          "name1"
        ],
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false
      },
      "retail_product_group_request_body": {
        "type": "object",
        "required": [
          "data"
        ],
        "additionalProperties": false,
        "properties": {
          "meta": {
            "type": "object",
            "$ref": "#/components/schemas/inbound_meta"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "$ref": "#/components/schemas/retail_product_group"
            }
          }
        }
      },
      "retail_product_location_batch_size": {
        "type": "object",
        "properties": {
          "product_batch_size": {
            "type": "string",
            "minLength": 1,
            "description": "Code for the product batch-size. Can be created by concatenating the product code and the batch size, e.g. \"PRODUCT1/2.0\", or the description, e.g. \"PRODUCT1/Box\".",
            "example": "PRODUCT1/Box"
          },
          "product": {
            "type": "string",
            "minLength": 1,
            "description": "Product code. Reference to products.",
            "example": "PRODUCT1"
          },
          "location": {
            "type": "string",
            "minLength": 1,
            "description": "Location code. Reference to locations.",
            "example": "LOCATION1"
          },
          "valid": {
            "type": "boolean",
            "description": "Validity setting: -true= product-location-batch size is valid and can be used; -false = product-location-batch size is not valid, and can not be used.",
            "example": true
          },
          "validity_date_type": {
            "type": [
              "string",
              "null"
            ],
            "minLength": 1,
            "description": "Start and end date defined either as ORDERS or DELIVERIES.",
            "example": "ORDERS",
            "enum": [
              "DELIVERIES",
              "ORDERS",
              null
            ]
          },
          "validity_start_date": {
            "type": [
              "string",
              "null"
            ],
            "format": "date",
            "description": "Start of validity period for batch size. Note that the field valid needs to be set as true.",
            "example": "2019-01-01"
          },
          "validity_end_date": {
            "type": [
              "string",
              "null"
            ],
            "format": "date",
            "description": "End of validity period for batch size. Note that the field valid needs to be set as true.",
            "example": "2019-12-31"
          },
          "batch_trigger_level": {
            "type": [
              "number",
              "null"
            ],
            "description": "Bath trigger level % for the product-location-batch size. Batch size is rounded down to nearest multiple if order need is less than trigger level % over the previous batch size multiple.",
            "example": 50.1
          },
          "percentage_limit": {
            "type": [
              "number",
              "null"
            ],
            "description": " Percentage limit % for the product-location-batch size. Batch size is used for an order (or as the 1st batch size for an order) if: order need >= percentage limit * batch size  ",
            "example": 0.5
          },
          "supplier_code": {
            "type": [
              "string",
              "null"
            ],
            "description": "Supplier for a product-location-batch size. Use this field to set a supplier for a product-location in a store if same product can be ordered to a store in multiple batch sizes (one batch size corresponding to one DC product), and different batch sizes are ordered from different DCs.",
            "example": "SUPPLIER1"
          }
        },
        "required": [
          "product_batch_size",
          "product",
          "location",
          "valid"
        ],
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false
      },
      "retail_product_location_batch_size_request_body": {
        "type": "object",
        "required": [
          "data"
        ],
        "additionalProperties": false,
        "properties": {
          "meta": {
            "type": "object",
            "$ref": "#/components/schemas/inbound_meta"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "$ref": "#/components/schemas/retail_product_location_batch_size"
            }
          }
        }
      },
      "retail_delete_product_location_batch_size": {
        "type": "object",
        "properties": {
          "product_batch_size": {
            "type": "string",
            "minLength": 1,
            "description": "Code for the product batch-size. Reference to product batch-sizes.",
            "example": "PRODUCT1/Box"
          },
          "product": {
            "type": "string",
            "minLength": 1,
            "description": "Product code. Reference to products.",
            "example": "PRODUCT1"
          },
          "location": {
            "type": "string",
            "minLength": 1,
            "description": "Location code. Reference to locations.",
            "example": "LOCATION1"
          }
        },
        "required": [
          "product_batch_size",
          "product",
          "location"
        ],
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false
      },
      "retail_delete_product_location_batch_size_request_body": {
        "type": "object",
        "required": [
          "data"
        ],
        "additionalProperties": false,
        "properties": {
          "meta": {
            "type": "object",
            "$ref": "#/components/schemas/inbound_meta"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "$ref": "#/components/schemas/retail_delete_product_location_batch_size"
            }
          }
        }
      },
      "retail_product_location_campaign": {
        "type": "object",
        "properties": {
          "campaign": {
            "type": "string",
            "minLength": 1,
            "description": "Code of the campaign.",
            "example": "CAMPAIGN1"
          },
          "product": {
            "type": "string",
            "minLength": 1,
            "description": "Code of the product.",
            "example": "PRODUCT1"
          },
          "location": {
            "type": "string",
            "minLength": 1,
            "description": "Code of the location of the campaign.",
            "example": "LOCATION1"
          },
          "campaign_price": {
            "type": [
              "number",
              "null"
            ],
            "description": "Campaign specific sales price for the product-location of one inventory unit excluding VAT.",
            "example": 5.99
          },
          "secondary_space": {
            "type": "boolean",
            "description": "Indicates whether the product-location has additional space available during the campaign time period.",
            "example": true
          }
        },
        "required": [
          "product",
          "location",
          "campaign"
        ],
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false
      },
      "retail_product_location_campaign_request_body": {
        "type": "object",
        "required": [
          "data"
        ],
        "additionalProperties": false,
        "properties": {
          "meta": {
            "type": "object",
            "$ref": "#/components/schemas/inbound_meta"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "$ref": "#/components/schemas/retail_product_location_campaign"
            }
          }
        }
      },
      "retail_delete_product_location_campaign": {
        "type": "object",
        "properties": {
          "product": {
            "type": "string",
            "minLength": 1,
            "description": "Code of the campaign.",
            "example": "SHIRTS-2018-Q1"
          },
          "location": {
            "type": "string",
            "minLength": 1,
            "description": "Code of the location.",
            "example": "LOCATION1"
          },
          "campaign": {
            "type": "string",
            "minLength": 1,
            "description": "Code of the campaign.",
            "example": "PRODUCT1"
          }
        },
        "required": [
          "product",
          "location",
          "campaign"
        ],
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false
      },
      "retail_delete_product_location_campaign_request_body": {
        "type": "object",
        "required": [
          "data"
        ],
        "additionalProperties": false,
        "properties": {
          "meta": {
            "type": "object",
            "$ref": "#/components/schemas/inbound_meta"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "$ref": "#/components/schemas/retail_delete_product_location_campaign"
            }
          }
        }
      },
      "retail_product_location_category": {
        "type": "object",
        "properties": {
          "product": {
            "type": "string",
            "minLength": 1,
            "description": "Product code. Reference to Products.",
            "example": "PRODUCT1"
          },
          "location": {
            "type": "string",
            "minLength": 1,
            "description": "Location code. Reference to Locations.",
            "example": "LOCATION1"
          },
          "merchandising_product_group_5": {
            "type": "string",
            "minLength": 1,
            "description": "Reference to the merchandising product group hierarchy. The exact configuration needs to be discussed during implementation.",
            "example": "102009"
          }
        },
        "required": [
          "product",
          "location",
          "merchandising_product_group_5"
        ],
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false
      },
      "retail_product_location_category_request_body": {
        "type": "object",
        "required": [
          "data"
        ],
        "additionalProperties": false,
        "properties": {
          "meta": {
            "type": "object",
            "$ref": "#/components/schemas/inbound_meta"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "$ref": "#/components/schemas/retail_product_location_category"
            }
          }
        }
      },
      "retail_product_location_category_assortment": {
        "type": "object",
        "properties": {
          "assortment": {
            "type": "string",
            "minLength": 1,
            "description": "Unique identifier for the assortment.",
            "example": "105040"
          },
          "product": {
            "type": "string",
            "minLength": 1,
            "description": "Product code.",
            "example": "578364"
          },
          "merchandising_product_group_5": {
            "type": "string",
            "minLength": 1,
            "description": "Reference to the merchandising product group hierarchy. The exact configuration needs to be discussed during implementation.",
            "example": "102009"
          },
          "location": {
            "type": "string",
            "minLength": 1,
            "description": "Location code. Can be omitted if not available - in that case, a dummy location will be used in RELEX Plan.",
            "example": "340"
          },
          "is_ranged": {
            "type": "boolean",
            "description": "Is the assortment product recommended to be placed.",
            "example": true
          },
          "product_treatment_type": {
            "type": [
              "string",
              "null"
            ],
            "description": "Options: Normal, Core, Optional.",
            "example": "NORMAL",
            "enum": [
              "CORE",
              "NORMAL",
              "OPTIONAL",
              null
            ]
          },
          "rank": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Importance and priority of the assortment product.",
            "example": 1
          },
          "units": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Number of units to place to meet inventory targets.",
            "example": 15
          },
          "max_units": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Maximum units to place.",
            "example": 30
          },
          "facings": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Number of facings to place.",
            "example": 5
          },
          "local_product": {
            "type": "boolean",
            "description": "Indicates whether assortment-product is a local product in this location.",
            "example": true
          },
          "product_localization": {
            "type": [
              "string",
              "null"
            ],
            "description": "Defines local and regional products. Possible values NONE, REGIONAL, LOCAL.",
            "example": "REGIONAL",
            "enum": [
              "LOCAL",
              "NONE",
              "REGIONAL",
              null
            ]
          }
        },
        "required": [
          "assortment",
          "product",
          "merchandising_product_group_5",
          "location"
        ],
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false
      },
      "retail_product_location_category_assortment_request_body": {
        "type": "object",
        "required": [
          "data"
        ],
        "additionalProperties": false,
        "properties": {
          "meta": {
            "type": "object",
            "$ref": "#/components/schemas/inbound_meta"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "$ref": "#/components/schemas/retail_product_location_category_assortment"
            }
          }
        }
      },
      "retail_product_location_constraint_group": {
        "type": "object",
        "properties": {
          "product": {
            "type": "string",
            "minLength": 1,
            "description": "Product code. Reference to Products.",
            "example": "PRODUCT1"
          },
          "location": {
            "type": "string",
            "minLength": 1,
            "description": "Location code. Reference to Locations.",
            "example": "LOCATION1"
          },
          "constraint_group": {
            "type": "string",
            "minLength": 1,
            "description": "Constraint group code. Unique identifier of the constraint group.",
            "example": "GROUP_1"
          }
        },
        "required": [
          "product",
          "location",
          "constraint_group"
        ],
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false
      },
      "retail_product_location_constraint_group_request_body": {
        "type": "object",
        "required": [
          "data"
        ],
        "additionalProperties": false,
        "properties": {
          "meta": {
            "type": "object",
            "$ref": "#/components/schemas/inbound_meta"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "$ref": "#/components/schemas/retail_product_location_constraint_group"
            }
          }
        }
      },
      "retail_product_location_coordination_group": {
        "type": "object",
        "properties": {
          "product": {
            "type": "string",
            "minLength": 1,
            "description": "Item code",
            "example": "ITEM1"
          },
          "location": {
            "type": "string",
            "minLength": 1,
            "description": "Inventory location code",
            "example": "LOCATION1"
          },
          "coordination_group": {
            "type": "string",
            "minLength": 1,
            "description": "Coordination Group send in the Coordination Group interface.",
            "example": "FRESH123"
          }
        },
        "required": [
          "product",
          "location",
          "coordination_group"
        ],
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false
      },
      "retail_product_location_coordination_group_request_body": {
        "type": "object",
        "required": [
          "data"
        ],
        "additionalProperties": false,
        "properties": {
          "meta": {
            "type": "object",
            "$ref": "#/components/schemas/inbound_meta"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "$ref": "#/components/schemas/retail_product_location_coordination_group"
            }
          }
        }
      },
      "retail_product_location_delivery_schedule": {
        "type": "object",
        "properties": {
          "product": {
            "type": "string",
            "minLength": 1,
            "description": "Product code. Reference to products.",
            "example": "PRODUCT1"
          },
          "location": {
            "type": "string",
            "minLength": 1,
            "description": "Location code. Reference to locations.",
            "example": "LOCATION1"
          },
          "delivery_schedule": {
            "type": "string",
            "minLength": 1,
            "description": "Delivery schedule code. Reference to delivery schedules.",
            "example": "2017-01-01-2019-01-01_ABCDE"
          }
        },
        "required": [
          "product",
          "location",
          "delivery_schedule"
        ],
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false
      },
      "retail_product_location_delivery_schedule_request_body": {
        "type": "object",
        "required": [
          "data"
        ],
        "additionalProperties": false,
        "properties": {
          "meta": {
            "type": "object",
            "$ref": "#/components/schemas/inbound_meta"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "$ref": "#/components/schemas/retail_product_location_delivery_schedule"
            }
          }
        }
      },
      "retail_delete_product_location_delivery_schedule": {
        "type": "object",
        "properties": {
          "product": {
            "type": "string",
            "minLength": 1,
            "description": "Product code. Reference to products.",
            "example": "PRODUCT1"
          },
          "location": {
            "type": "string",
            "minLength": 1,
            "description": "Location code. Reference to locations.",
            "example": "LOCATION1"
          },
          "delivery_schedule": {
            "type": "string",
            "minLength": 1,
            "description": "Delivery schedule code. Reference to delivery schedules.",
            "example": "2017-01-01-2019-01-01_ABCDE"
          }
        },
        "required": [
          "product",
          "location",
          "delivery_schedule"
        ],
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false
      },
      "retail_delete_product_location_delivery_schedule_request_body": {
        "type": "object",
        "required": [
          "data"
        ],
        "additionalProperties": false,
        "properties": {
          "meta": {
            "type": "object",
            "$ref": "#/components/schemas/inbound_meta"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "$ref": "#/components/schemas/retail_delete_product_location_delivery_schedule"
            }
          }
        }
      },
      "retail_product_location_price_calendar": {
        "type": "object",
        "properties": {
          "price_calendar": {
            "type": "string",
            "minLength": 1,
            "description": "Unique identifier of the price calendar.",
            "example": "100100100"
          },
          "product": {
            "type": "string",
            "minLength": 1,
            "description": "Item code.",
            "example": "PRODUCT1"
          },
          "location": {
            "type": "string",
            "minLength": 1,
            "description": "Inventory Location code.",
            "example": "LOCATION1"
          }
        },
        "required": [
          "price_calendar",
          "product",
          "location"
        ],
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false
      },
      "retail_product_location_price_calendar_request_body": {
        "type": "object",
        "required": [
          "data"
        ],
        "additionalProperties": false,
        "properties": {
          "meta": {
            "type": "object",
            "$ref": "#/components/schemas/inbound_meta"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "$ref": "#/components/schemas/retail_product_location_price_calendar"
            }
          }
        }
      },
      "retail_product_location_supplier_replenishment_agreement": {
        "type": "object",
        "properties": {
          "product": {
            "type": "string",
            "minLength": 1,
            "description": "Product code. Reference to Products.",
            "example": "PRODUCT1"
          },
          "location": {
            "type": "string",
            "minLength": 1,
            "description": "Location code. Reference to Locations.",
            "example": "LOCATION1"
          },
          "supplier": {
            "type": "string",
            "minLength": 1,
            "description": "Supplier code. Reference to Suppliers.",
            "example": "SUPPLIER1"
          },
          "replenishment_agreement": {
            "type": "string",
            "minLength": 1,
            "description": "Unique identifier for the replenishment agreement.",
            "example": "529173"
          },
          "active": {
            "type": "boolean",
            "description": "Determines whether this product-location-supplier replenishment agreement is considered in calculations. Can be set to false to temporarily deactivate the product-location-supplier replenishment agreement. Both this and the same field on replenishment agreement level need to be true in order for the product-location-supplier replenishment agreement to be active.",
            "example": true
          },
          "quota": {
            "type": [
              "number",
              "null"
            ],
            "description": "Defines the minimum or maximum quota to be sourced from the supplier this product location supplier replenishment agreement is connected to. Only considered if the type of replenishment agreement is set to \"Min. quota\" or \"Max. quota\". The replenishment agreement type also defines how the value in this field is to be interpreted. If the type is set to \"Min. quota\", the value in this field is interpreted as a minimum quota whereas for \"Max. quota\", the value is interpreted as a maximum quota. This field takes precedence over the same field on replenishment agreement level.",
            "example": 200
          },
          "split_percentage": {
            "type": [
              "number",
              "null"
            ],
            "description": "Defines the share of orders or deliveries to be sourced from the supplier this product location supplier replenishment agreement is connected to. Only considered if the type of this replenishment agreement is set to \"Split percentage\". This field takes precedence over the same field on replenishment agreement level.",
            "example": 0.5
          }
        },
        "required": [
          "product",
          "location",
          "supplier",
          "replenishment_agreement"
        ],
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false
      },
      "retail_product_location_supplier_replenishment_agreement_request_body": {
        "type": "object",
        "required": [
          "data"
        ],
        "additionalProperties": false,
        "properties": {
          "meta": {
            "type": "object",
            "$ref": "#/components/schemas/inbound_meta"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "$ref": "#/components/schemas/retail_product_location_supplier_replenishment_agreement"
            }
          }
        }
      },
      "retail_product_location_supplier": {
        "type": "object",
        "properties": {
          "product": {
            "type": "string",
            "minLength": 1,
            "description": "Product code. Reference to Products.",
            "example": "5789"
          },
          "location": {
            "type": "string",
            "minLength": 1,
            "description": "Location code. Reference to Locations.",
            "example": "DC001"
          },
          "supplier": {
            "type": "string",
            "minLength": 1,
            "description": "Supplier code. Reference to Suppliers.",
            "example": "S1400"
          },
          "batch_size": {
            "type": [
              "number",
              "null"
            ],
            "description": "Batch size for supplier of product-location.",
            "example": 10
          },
          "preferred": {
            "type": "boolean",
            "description": "Set to true if it's the preferred supplier.",
            "example": true
          },
          "minimum_delivery_batch": {
            "type": [
              "number",
              "null"
            ],
            "description": "Number of inventory units that must be ordered at minimum.",
            "example": 150
          },
          "erp_reference": {
            "type": [
              "string",
              "null"
            ],
            "description": "ERP document reference.",
            "example": "20004567"
          },
          "purchase_batch_unit": {
            "type": [
              "string",
              "null"
            ],
            "description": "Purchase batch unit. Inventory unit of the purchase batch size.",
            "example": "BOX"
          },
          "supplier_subcategory": {
            "type": [
              "string",
              "null"
            ],
            "description": "Supplier subcategory. Additional subcategory for supplier.",
            "example": "Cold cuts"
          },
          "alternative_product_code": {
            "type": [
              "string",
              "null"
            ],
            "description": "Alternative product code. Supplier's product code",
            "example": "P1111"
          },
          "availability_start": {
            "type": [
              "string",
              "null"
            ],
            "format": "date",
            "description": "Availability start. The date from which onward it is possible to purchase the product from the supplier.",
            "example": "2025-01-01"
          },
          "availability_end": {
            "type": [
              "string",
              "null"
            ],
            "format": "date",
            "description": "Availability end. The date until which it is possible to purchase the product from the supplier.",
            "example": "2025-09-09"
          },
          "manufacturer": {
            "type": [
              "string",
              "null"
            ],
            "description": "Original manufacturer of the product.",
            "example": "Coca Cola"
          },
          "standard_delivery_batch": {
            "type": [
              "number",
              "null"
            ],
            "description": "Standard delivery batch. Default batch size that is ordered or produced at a time.",
            "example": 5
          },
          "max_lot_size": {
            "type": [
              "number",
              "null"
            ],
            "description": "Max lot size. Maximum batch that can be ordered or produced at a time.",
            "example": 10
          },
          "delivery_all": {
            "type": [
              "integer",
              "null"
            ],
            "description": "The lead time from order to delivery.",
            "example": 3
          },
          "purchase_price": {
            "type": [
              "number",
              "null"
            ],
            "description": "Max lot size. Maximum batch that can be ordered or produced at a time.",
            "example": 10
          },
          "currency": {
            "type": [
              "string",
              "null"
            ],
            "description": "Currency of the purchase price of one inventory unit.",
            "example": "EUR"
          },
          "coordination_group": {
            "type": [
              "string",
              "null"
            ],
            "description": "[PLS] Coordination group. Reference to the coordination group associated with this product-location supplier. Used for coordinated ordering with multi-supplier replenishment.",
            "example": "CG100001"
          },
          "box_size": {
            "type": [
              "number",
              "null"
            ],
            "description": "Number of inventory units in one box. Available also on Product and Product-location level.",
            "example": 12
          },
          "pallet_size": {
            "type": [
              "number",
              "null"
            ],
            "description": "Number of inventory units in one pallet. Available also on Product and Product-location level.",
            "example": 500
          },
          "pallet_layer_size": {
            "type": [
              "number",
              "null"
            ],
            "description": "The number of inventory units of the product that fit on one pallet layer. Available also on Product and Product-location level.",
            "example": 1000
          },
          "space_size": {
            "type": [
              "number",
              "null"
            ],
            "description": "Space. The number of inventory units of the product that fit in one space unit.",
            "example": 1
          },
          "space_unit": {
            "type": [
              "string",
              "null"
            ],
            "description": "Space unit. Name for the space unit used for the product.",
            "example": "M3"
          },
          "volume": {
            "type": [
              "number",
              "null"
            ],
            "description": "Volume of one inventory unit of the product. Unit of measurement needs to be the same for all products within one coordination group / supplier. Available also on Product and Product-location level.",
            "example": 0.001
          },
          "volume_unit": {
            "type": [
              "string",
              "null"
            ],
            "description": "Volume unit. Name of the volume unit used for this product. Available also on Product and Product-location level.",
            "example": "M3"
          },
          "weight": {
            "type": [
              "number",
              "null"
            ],
            "description": "Gross weight of one inventory unit of the product. Weight unit is defined in the weight_unit field. Unit of measurement needs to be the same for all products within one coordination group/supplier. Available also on Product and Product-location level.",
            "example": 0.1
          },
          "weight_unit": {
            "type": [
              "string",
              "null"
            ],
            "description": "Name of the weight unit used for this product. Available also on Product and Product-location level.",
            "example": "KG"
          }
        },
        "required": [
          "product",
          "location",
          "supplier"
        ],
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false
      },
      "retail_product_location_supplier_request_body": {
        "type": "object",
        "required": [
          "data"
        ],
        "additionalProperties": false,
        "properties": {
          "meta": {
            "type": "object",
            "$ref": "#/components/schemas/inbound_meta"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "$ref": "#/components/schemas/retail_product_location_supplier"
            }
          }
        }
      },
      "retail_product_location": {
        "type": "object",
        "properties": {
          "product": {
            "type": "string",
            "minLength": 1,
            "description": "Item code.",
            "example": "PRODUCT1"
          },
          "location": {
            "type": "string",
            "minLength": 1,
            "description": "Inventory location code.",
            "example": "LOCATION1"
          },
          "supplier": {
            "type": "string",
            "description": "Primary supplier of the product.",
            "example": "SUPPLIER1"
          },
          "purchase_price": {
            "type": "number",
            "description": "Current purchase price of product (per inventory unit)",
            "example": 1.99
          },
          "book_value": {
            "type": [
              "number",
              "null"
            ],
            "description": "Book value of the product",
            "example": 1.02
          },
          "sales_price": {
            "type": [
              "number",
              "null"
            ],
            "description": "Current sales price of product (per inventory unit) excluding sales tax e.g. VAT.",
            "example": 7.99
          },
          "sales_tax_rate": {
            "type": [
              "number",
              "null"
            ],
            "description": "Rate of the sales tax, VAT, GST, or a similar sales-related tax.",
            "example": 0.24
          },
          "order_quantity": {
            "type": [
              "number",
              "null"
            ],
            "description": "Order batch size in inventory units. Available also on PL level.",
            "example": 12,
            "minimum": 0
          },
          "minimum_delivery_batch": {
            "type": [
              "number",
              "null"
            ],
            "description": "Minimum order quantity in inventory unit. If not available, there is also possibility to calculate economic order quantity in RELEX.",
            "example": 24
          },
          "max_lot_size": {
            "type": [
              "number",
              "null"
            ],
            "description": "Maximum lot size. Maximum batch that can be ordered or produced at a time.",
            "example": 10
          },
          "ugly_shelf_point": {
            "type": [
              "number",
              "null"
            ],
            "description": "Minimum number of inventory units that are required in shelf at once.",
            "example": 2
          },
          "shelf_space": {
            "type": [
              "number",
              "null"
            ],
            "description": "Number of inventory units that fit into shelf at once.",
            "example": 4
          },
          "introduction_date": {
            "type": [
              "string",
              "null"
            ],
            "format": "date",
            "description": "Date of product introduction - product to this location is not ordered before this date. Available also on Product level.",
            "example": "2017-01-01"
          },
          "termination_date": {
            "type": [
              "string",
              "null"
            ],
            "format": "date",
            "description": "Date of product termination - product to this location is not ordered after this date. Available also on Product level.",
            "example": "2019-12-31"
          },
          "reference_spoiling_time": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Spoiling time in days. Available also on Product level.",
            "example": 7
          },
          "required_remaining_shelf_life": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Required outbound delivery remaining shelf life. Forecasted spoilage in RELEX takes also batch balance's estimated expiration date into account: effective spoiling date = \"estimated_date\" - \"required_remaining_shelf_life\". Available also on Product level.",
            "example": 7
          },
          "production_lead_time": {
            "type": [
              "integer",
              "null"
            ],
            "description": "The number of days it takes for the supplier to manufacture the product so that it is shippable.",
            "example": 7
          },
          "box_size": {
            "type": [
              "number",
              "null"
            ],
            "description": "Number of inventory units in one box. Available also on Product level.",
            "example": 12
          },
          "pallet_size": {
            "type": [
              "number",
              "null"
            ],
            "description": "Number of inventory units in one pallet. Available also on Product level.",
            "example": 7
          },
          "inventory_unit_in_consumer_units": {
            "type": [
              "number",
              "null"
            ],
            "description": "Determines what one unit for this product-location means in consumer package units.",
            "example": 10
          },
          "assortment_status": {
            "type": [
              "string",
              "null"
            ],
            "description": "Determines what one unit for this product-location means in consumer package units.",
            "example": "Live assortment"
          },
          "shelving_delay": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Shelving time (in days). Added at the end of lead time in order proposal calculation. This parameter overrides any shelving delay set on location level.",
            "example": 2
          },
          "legal_for_merchandising": {
            "type": "boolean",
            "description": "Used for creating the legal list for planogram optimization. A workflow task can be used to remove non-legal products.",
            "example": true
          },
          "illegal_for_merchandising": {
            "type": "boolean",
            "description": "Used for creating the illegal list for planogram optimization. A workflow task can be used to remove non-legal products.",
            "example": true
          },
          "reference_code": {
            "type": [
              "string",
              "null"
            ],
            "description": "Product code of the reference product.",
            "example": "420"
          },
          "reference_location_code": {
            "type": [
              "string",
              "null"
            ],
            "description": "Location code of the reference location.",
            "example": "8192"
          }
        },
        "required": [
          "product",
          "location",
          "supplier",
          "purchase_price"
        ],
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false
      },
      "retail_product_location_request_body": {
        "type": "object",
        "required": [
          "data"
        ],
        "additionalProperties": false,
        "properties": {
          "meta": {
            "type": "object",
            "$ref": "#/components/schemas/inbound_meta"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "$ref": "#/components/schemas/retail_product_location"
            }
          }
        }
      },
      "retail_product_product_class": {
        "type": "object",
        "properties": {
          "product_class": {
            "type": "string",
            "minLength": 1,
            "description": "Product class code. Reference to Product_Classes.",
            "example": "SEGMENT_1_ABC_SPRING"
          },
          "product": {
            "type": "string",
            "minLength": 1,
            "description": "Product code. Reference to Products.",
            "example": "PRODUCT1"
          }
        },
        "required": [
          "product_class",
          "product"
        ],
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false
      },
      "retail_product_product_class_request_body": {
        "type": "object",
        "required": [
          "data"
        ],
        "additionalProperties": false,
        "properties": {
          "meta": {
            "type": "object",
            "$ref": "#/components/schemas/inbound_meta"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "$ref": "#/components/schemas/retail_product_product_class"
            }
          }
        }
      },
      "retail_product": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "minLength": 1,
            "description": "Product code.",
            "example": "PRODUCT1"
          },
          "name": {
            "type": "string",
            "description": "Product name. If product name is needed in multiple localizations, it is possible to use field name_{language}, e.g. name_es for spanish or name_en for english. The full list of available localization options is in the Localization of names section.",
            "example": "Spring shirt, unisex"
          },
          "group": {
            "type": "string",
            "description": "Code of the sub product group in product group hierarchy. In three level hierarchy it would be code3",
            "example": "A123"
          },
          "weight": {
            "type": "number",
            "description": "Gross weight of one inventory unit of the product. Weight unit is defined in the \"Weight unit\" field. Unit of measurement needs to be the same for all products within one coordination group/supplier. Available also on Product-location level.",
            "example": 0.9
          },
          "weight_unit": {
            "type": "string",
            "description": "Name of the weight unit used for this product e.g. LBS or KG. Available also on Product-location level.",
            "example": "KG"
          },
          "ean": {
            "type": [
              "string",
              "null"
            ],
            "description": "Product's EAN code.",
            "example": "4740050002116"
          },
          "alternative_code": {
            "type": [
              "string",
              "null"
            ],
            "description": "Alternative code for the product. Used e.g. by central warehouse or by supplier.",
            "example": "4740"
          },
          "order_quantity": {
            "type": [
              "number",
              "null"
            ],
            "description": "Order batch size in inventory units. Available also on PL level..",
            "example": 12,
            "minimum": 0
          },
          "introduction_date": {
            "type": [
              "string",
              "null"
            ],
            "format": "date",
            "description": "Date of product introduction - product is not ordered before this date. Available also on PL level.",
            "example": "2017-01-01"
          },
          "termination_date": {
            "type": [
              "string",
              "null"
            ],
            "format": "date",
            "description": "Date of product termination - product is not ordered after this date. Available also on PL level.",
            "example": "2018-12-31"
          },
          "required_remaining_shelf_life": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Required outbound delivery remaining shelf life. Available also on PL level. Forecasted spoilage in RELEX takes also batch balance's estimated expiration date into account: effective spoiling date = \"estimated_date\" - \"required_remaining_shelf_life\"",
            "example": 7
          },
          "reference_spoiling_time": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Spoiling time in days. Available also on Product-location level.",
            "example": 7
          },
          "inventory_unit": {
            "type": [
              "string",
              "null"
            ],
            "description": "Name of the inventory unit",
            "example": "PC"
          },
          "height": {
            "type": [
              "number",
              "null"
            ],
            "description": "Height of one inventory unit of the product. Unit of measurement needs to be the same for all products.",
            "example": 25
          },
          "depth": {
            "type": [
              "number",
              "null"
            ],
            "description": "Length of one inventory unit of the product. Unit of measurement needs to be the same for all products.",
            "example": 0.1
          },
          "width": {
            "type": [
              "number",
              "null"
            ],
            "description": "Width of one inventory unit of the product. Unit of measurement needs to be the same for all products.",
            "example": 15.5
          },
          "dimension_unit": {
            "type": [
              "string",
              "null"
            ],
            "description": "Unit of measure used with Length, Width, and Height.",
            "example": "CM"
          },
          "volume_unit": {
            "type": [
              "string",
              "null"
            ],
            "description": "Name of the volume unit used for this product e.g. M3 or L. Available also on Product-location level.",
            "example": "M3"
          },
          "volume": {
            "type": [
              "number",
              "null"
            ],
            "description": "Volume of one inventory unit of the product. Volume unit is defined in the \"Volume unit\" field. Unit of measurement needs to be the same for all products within one coordination group/supplier",
            "example": 0.001
          },
          "box_size": {
            "type": [
              "number",
              "null"
            ],
            "description": "Number of inventory units in one box. Available also on PL level.",
            "example": 12
          },
          "pallet_size": {
            "type": [
              "number",
              "null"
            ],
            "description": "Number of inventory units in one pallet. Available also on PL level",
            "example": 100
          },
          "image_url": {
            "type": [
              "string",
              "null"
            ],
            "description": "URL to product related picture.",
            "example": "http://company.com/images/PRODUCT1.png"
          },
          "variant_type": {
            "type": [
              "string",
              "null"
            ],
            "description": "When shipper or prepacks are used, variant type indicates the type of the product (MASTER, VARIANT, PRE_PACK)",
            "example": "MASTER",
            "enum": [
              "MASTER",
              "PRE_PACK",
              "VARIANT",
              null
            ]
          },
          "brand": {
            "type": [
              "string",
              "null"
            ],
            "description": "Indicates the brand associated with the product.",
            "example": "Nestle"
          },
          "is_private_label": {
            "type": "boolean",
            "description": "Indicates whether the product is private label/store brand as opposed to national brand.",
            "example": true
          },
          "brand_tier": {
            "type": [
              "string",
              "null"
            ],
            "description": "Brand categories or brand groups used for Price Optimization.",
            "example": "Nesquik"
          },
          "price_family": {
            "type": [
              "string",
              "null"
            ],
            "description": "Associates the product with a price family. Used for Price Optimization.",
            "example": "Family 1"
          },
          "line_group": {
            "type": [
              "string",
              "null"
            ],
            "description": "Line groups classify related prodcuts within a retailer's catalog. Used for Price Optimization.",
            "example": "Group 1"
          },
          "is_kvi": {
            "type": "boolean",
            "description": "Indicates whether the item is a Key-Value-Item. Used for Price Optimization.",
            "example": true
          },
          "kvi_group": {
            "type": [
              "string",
              "null"
            ],
            "description": "Associates a product with a specific Key-Value Item (KVI) grouping. Used for Price Optimization.",
            "example": "KVI group 1"
          },
          "supplier": {
            "type": [
              "string",
              "null"
            ],
            "description": "Code of the external supplier of the product used in Promotion Planing and Optimizations.",
            "example": "A100"
          },
          "manufacturer": {
            "type": [
              "string",
              "null"
            ],
            "description": "Indicates the manufacturer of the product.",
            "example": "Nestle"
          },
          "merchandising_style": {
            "type": [
              "string",
              "null"
            ],
            "description": "Indicates how the product is merchandised in a planogram by default. Possible values: UNIT, TRAY, CASE, ALTERNATE, DISPLAY, POINT OF PURCHASE",
            "example": "TRAY",
            "enum": [
              "ALTERNATE",
              "CASE",
              "DISPLAY",
              "POINT OF PURCHASE",
              "TRAY",
              "UNIT",
              null
            ]
          },
          "case_height": {
            "type": [
              "number",
              "null"
            ],
            "description": "The height of the merchandised case.",
            "example": 0.1
          },
          "case_depth": {
            "type": [
              "number",
              "null"
            ],
            "description": "The depth of the merchandised case.",
            "example": 0.1
          },
          "case_width": {
            "type": [
              "number",
              "null"
            ],
            "description": "The width of the merchandised case.",
            "example": 0.1
          },
          "case_units_high": {
            "type": [
              "integer",
              "null"
            ],
            "description": "The number of units high in a case pack.",
            "example": 3
          },
          "case_units_deep": {
            "type": [
              "integer",
              "null"
            ],
            "description": "The number of units deep in a case pack.",
            "example": 3
          },
          "case_units_wide": {
            "type": [
              "integer",
              "null"
            ],
            "description": "The number of units wide in a case pack.",
            "example": 3
          },
          "case_pack_units": {
            "type": [
              "integer",
              "null"
            ],
            "description": "The number of units within a case pack.",
            "example": 3
          },
          "nesting_height": {
            "type": [
              "number",
              "null"
            ],
            "description": "The remaining height of the product when nested vertically.",
            "example": 0.1
          },
          "nesting_depth": {
            "type": [
              "number",
              "null"
            ],
            "description": "The remaining depth of the product when nested vertically.",
            "example": 0.1
          },
          "nesting_width": {
            "type": [
              "number",
              "null"
            ],
            "description": "The remaining width of the product when nested vertically.",
            "example": 0.1
          },
          "squeeze_height": {
            "type": [
              "number",
              "null"
            ],
            "description": "Contains the height of the product as a percentage of the original height after squeezing the height as much as possible. A value of 80 % means that the product can be squeezed to be 20 % less high.",
            "example": 0.1
          },
          "squeeze_depth": {
            "type": [
              "number",
              "null"
            ],
            "description": "Contains the depth of the product as a percentage of the original depth after squeezing the depth as much as possible. A value of 80 % means that the product can be squeezed to be 20 % less deep.",
            "example": 0.1
          },
          "squeeze_width": {
            "type": [
              "number",
              "null"
            ],
            "description": "Contains the width of the product as a percentage of the original width after squeezing the width as much as possible. A value of 80 % means that the product can be squeezed to be 20 % less wide.",
            "example": 0.1
          },
          "tray_height": {
            "type": [
              "number",
              "null"
            ],
            "description": "Tray height",
            "example": 0.1
          },
          "tray_depth": {
            "type": [
              "number",
              "null"
            ],
            "description": "Tray depth",
            "example": 0.1
          },
          "tray_width": {
            "type": [
              "number",
              "null"
            ],
            "description": "Tray width",
            "example": 0.1
          },
          "tray_units_high": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Tray high",
            "example": 1
          },
          "tray_units_deep": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Tray deep",
            "example": 1
          },
          "tray_units_wide": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Tray wide ",
            "example": 1
          },
          "tray_pack_units": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Tray units",
            "example": 1
          },
          "length": {
            "type": [
              "number",
              "null"
            ],
            "description": "Length of one inventory unit of the product.",
            "example": 35
          },
          "brand_code": {
            "type": [
              "string",
              "null"
            ],
            "description": "Brand code of the brand.",
            "example": "1234"
          },
          "shape": {
            "type": [
              "string",
              "null"
            ],
            "description": "Shape",
            "example": "BOX",
            "enum": [
              "BOTTLE",
              "BOX",
              null
            ]
          },
          "peg_x": {
            "type": [
              "number",
              "null"
            ],
            "description": "Peg hole x-coordinate",
            "example": 24.938379
          },
          "peg_y": {
            "type": [
              "number",
              "null"
            ],
            "description": "Peg hole x-coordinate",
            "example": 60.169857
          },
          "number_of_peg_holes": {
            "type": [
              "integer",
              "null"
            ],
            "description": "The number of peg holes the product has. Possible values: 0, 1, 2, 3",
            "example": 0
          },
          "peg_depth": {
            "type": [
              "number",
              "null"
            ],
            "description": "The depth of the peg used for product merchandising",
            "example": 0.1
          },
          "max_stack": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Maximum number of units high product can stack",
            "example": 3
          },
          "max_top_cap": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Maximum number of caps high product can stack",
            "example": 3
          },
          "max_right_cap": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Maximum number of caps wide product can stack",
            "example": 3
          },
          "max_deep_cap": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Maximum number of caps deep product can stack",
            "example": 3
          },
          "min_deep": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Minimum number of units deep product can place",
            "example": 1
          },
          "max_deep": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Maximum number of units deep product can place",
            "example": 3
          },
          "front_overhang": {
            "type": [
              "number",
              "null"
            ],
            "description": "The depth the product can exceed the shelf space to the front",
            "example": 0.1
          },
          "finger_space_above": {
            "type": [
              "number",
              "null"
            ],
            "description": "The height of empty space that the product requires above it",
            "example": 0.1
          },
          "finger_space_to_the_side": {
            "type": [
              "number",
              "null"
            ],
            "description": "The width of empty space that the product requires beside it",
            "example": 0.1
          },
          "orientation_type": {
            "type": [
              "string",
              "null"
            ],
            "description": "The orientation in which the product should be placed.",
            "example": "FRONT_0",
            "enum": [
              "BACK_0",
              "BACK_180",
              "BACK_270",
              "BACK_90",
              "BOTTOM_0",
              "BOTTOM_180",
              "BOTTOM_270",
              "BOTTOM_90",
              "FRONT_0",
              "FRONT_180",
              "FRONT_270",
              "FRONT_90",
              "LEFT_0",
              "LEFT_180",
              "LEFT_270",
              "LEFT_90",
              "RIGHT_0",
              "RIGHT_180",
              "RIGHT_270",
              "RIGHT_90",
              "TOP_0",
              "TOP_180",
              "TOP_270",
              "TOP_90",
              null
            ]
          },
          "can_break_tray_up": {
            "type": "boolean",
            "description": "Automation can break the tray and place a unit next to it as a cap.",
            "example": true
          },
          "can_break_tray_down": {
            "type": "boolean",
            "description": "Automation can break the tray and place a unit under to it as a cap.",
            "example": true
          },
          "can_break_tray_top": {
            "type": "boolean",
            "description": "Automation can break the tray and place a unit on top of it as a cap.",
            "example": true
          },
          "can_break_tray_back": {
            "type": "boolean",
            "description": "Automation can break the tray and place a unit behind it as a cap.",
            "example": true
          },
          "merchandising_size": {
            "type": [
              "string",
              "null"
            ],
            "description": "The size of the merchandising product.",
            "example": "20"
          },
          "merchandising_net_content": {
            "type": [
              "number",
              "null"
            ],
            "description": "The net content for the merchandising product. Used in Promotion Planing.",
            "example": 1980
          },
          "merchandising_unit_of_measure": {
            "type": [
              "string",
              "null"
            ],
            "description": "The unit of measure for the merchandising size.",
            "example": "cm"
          },
          "sell_pack_count": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Number of products in the sell pack.",
            "example": 5
          },
          "sell_pack_description": {
            "type": [
              "string",
              "null"
            ],
            "description": "Description of the sell pack.",
            "example": "Descriptive text"
          },
          "sell_pack_product": {
            "type": [
              "string",
              "null"
            ],
            "description": "Sell pack product code used in Promotion Planing.",
            "example": "57494"
          },
          "reference_code": {
            "type": [
              "string",
              "null"
            ],
            "description": "For a new product, you can adopt the sales history of an existing product by defining its code here.",
            "example": "37228"
          },
          "space_unit": {
            "type": [
              "string",
              "null"
            ],
            "description": "Name for the space unit used for the product-location. Available also on Product-location level.",
            "example": "Pallet places"
          }
        },
        "required": [
          "code",
          "name",
          "group",
          "weight",
          "weight_unit"
        ],
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false
      },
      "retail_product_request_body": {
        "type": "object",
        "required": [
          "data"
        ],
        "additionalProperties": false,
        "properties": {
          "meta": {
            "type": "object",
            "$ref": "#/components/schemas/inbound_meta"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "$ref": "#/components/schemas/retail_product"
            }
          }
        }
      },
      "retail_product_replacement_and_reference": {
        "type": "object",
        "properties": {
          "is_replacement": {
            "type": "boolean",
            "description": "Defines the type: true = replacement, false = reference",
            "example": true
          },
          "new_location_code": {
            "type": [
              "string",
              "null"
            ],
            "description": "Code of the location where replacement affects. If global, leave empty.",
            "example": "LOCATION11"
          },
          "old_location_code": {
            "type": [
              "string",
              "null"
            ],
            "description": "Code of the location where replaced product existed. If global, leave empty.",
            "example": "LOCATION1"
          },
          "new_product_code": {
            "type": "string",
            "description": "Item code of the new replacing product.",
            "example": "PRODUCT11"
          },
          "old_product_code": {
            "type": "string",
            "description": "Item code of the old product which will be replaced.",
            "example": "PRODUCT1"
          },
          "scaling_factor": {
            "type": [
              "number",
              "null"
            ],
            "description": "% which the sales of the new product will be scaled compared to the old code. ",
            "example": 0.75
          }
        },
        "dependentRequired": {
          "old_location_code": [
            "new_location_code"
          ],
          "new_location_code": [
            "old_location_code"
          ]
        },
        "required": [
          "is_replacement",
          "old_product_code",
          "new_product_code"
        ],
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false
      },
      "retail_product_replacement_and_reference_request_body": {
        "type": "object",
        "required": [
          "data"
        ],
        "additionalProperties": false,
        "properties": {
          "meta": {
            "type": "object",
            "$ref": "#/components/schemas/inbound_meta"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "$ref": "#/components/schemas/retail_product_replacement_and_reference"
            }
          }
        }
      },
      "retail_delete_product_replacement_and_reference": {
        "type": "object",
        "properties": {
          "is_replacement": {
            "type": "boolean",
            "description": "Defines the type: true = replacement, false = reference",
            "example": true
          },
          "new_location_code": {
            "type": "string",
            "minLength": 1,
            "description": "Code of the location where replacement affects. If global, leave empty.",
            "example": "LOCATION11"
          },
          "old_location_code": {
            "type": "string",
            "minLength": 1,
            "description": "Code of the location where replaced product existed. If global, leave empty.",
            "example": "LOCATION1"
          },
          "new_product_code": {
            "type": "string",
            "minLength": 1,
            "description": "Item code of the new replacing product.",
            "example": "PRODUCT11"
          },
          "old_product_code": {
            "type": "string",
            "minLength": 1,
            "description": "Item code of the old product which will be replaced.",
            "example": "PRODUCT1"
          }
        },
        "required": [
          "is_replacement",
          "old_product_code",
          "new_product_code"
        ],
        "dependentRequired": {
          "old_location_code": [
            "new_location_code"
          ],
          "new_location_code": [
            "old_location_code"
          ]
        },
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false
      },
      "retail_delete_product_replacement_and_reference_request_body": {
        "type": "object",
        "required": [
          "data"
        ],
        "additionalProperties": false,
        "properties": {
          "meta": {
            "type": "object",
            "$ref": "#/components/schemas/inbound_meta"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "$ref": "#/components/schemas/retail_delete_product_replacement_and_reference"
            }
          }
        }
      },
      "retail_replenishment_agreement": {
        "allOf": [
          {
            "if": {
              "properties": {
                "type": {
                  "const": "SPLIT_PERCENTAGE"
                }
              }
            },
            "then": {
              "required": [
                "split_percentage"
              ]
            },
            "else": {
              "required": [
                "quota"
              ]
            }
          },
          {
            "if": {
              "properties": {
                "contract_fulfillment_period": {
                  "const": "FULL"
                }
              }
            },
            "then": {
              "required": [
                "start_date",
                "end_date"
              ]
            }
          },
          {
            "if": {
              "properties": {
                "contract_fulfillment_period": {
                  "const": "RELATIVE"
                }
              }
            },
            "then": {
              "required": [
                "relative_contract_fulfillment_period_days_before",
                "relative_contract_fulfillment_period_days_after"
              ]
            }
          }
        ],
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "minLength": 1,
            "description": "Replenishment agreement code.",
            "example": "529173"
          },
          "name": {
            "type": "string",
            "description": "Replenishment agreement name.",
            "example": "March 2021 purchase contract with vendor A"
          },
          "type": {
            "type": "string",
            "description": "Determines the type of the replenishment agreement.",
            "example": "MIN_QUOTA",
            "enum": [
              "MAX_QUOTA",
              "MIN_QUOTA",
              "SPLIT_PERCENTAGE"
            ]
          },
          "quota": {
            "type": [
              "number",
              "null"
            ],
            "description": "Defines the minimum or maximum quota to be sourced from the supplier this replenishment agreement is connected to. Mandatory if the type field (see above) is set to MIN_QUOTA or MAX_QUOTA. The replenishment agreement type also defines how the value in this field is to be interpreted. If the type field is set to MIN_QUOTA, the value in this field is interpreted as a minimum quota whereas for MAX_QUOTA, the value is interpreted as a maximum quota.",
            "example": 200,
            "minimum": 0
          },
          "split_percentage": {
            "type": [
              "number",
              "null"
            ],
            "description": "Defines the share of orders or deliveries to be sourced from the supplier the replenishment agreement is connected to. Mandatory with type = SPLIT_PERCENTAGE. The percentage should be given as a decimal, i.e. 50 % should be given as 0.50.",
            "example": 0.5,
            "minimum": 0
          },
          "split_percentage_or_quota_unit": {
            "type": [
              "string",
              "null"
            ],
            "description": "Defines the unit for the split percentage or quota. For example, type = MIN_QUOTA, quota = 100, and split_percentage_or_quota_unit = PALLETS mean that at least 100 pallets must be sourced from the supplier in question.",
            "example": "BATCHES",
            "enum": [
              "BATCHES",
              "BOXES",
              "PALLETS",
              "PALLET_LAYERS",
              "QUANTITY",
              "SPACE",
              "VALUE",
              "VOLUME",
              "WEIGHT",
              null
            ]
          },
          "active": {
            "type": "boolean",
            "description": "Determines whether the replenishment agreement is to be considered in calculations. Can be set to false to temporarily deactivate the replenishment agreement.",
            "example": true
          },
          "contract_fulfillment_period": {
            "type": [
              "string",
              "null"
            ],
            "description": "Defines the so-called contract fulfillment period associated with the replenishment agreement.",
            "example": "INDIVIDUAL",
            "enum": [
              "DAILY",
              "FULL",
              "INDIVIDUAL",
              "MONTHLY",
              "RELATIVE",
              "WEEKLY",
              "YEARLY",
              null
            ]
          },
          "contract_fulfillment_period_considered_for": {
            "type": [
              "string",
              "null"
            ],
            "description": "Determines whether the contract fulfillment period for a quota or split percentage is to be considered for orders or deliveries.",
            "example": "ORDERS",
            "enum": [
              "DELIVERIES",
              "ORDERS",
              null
            ]
          },
          "start_date": {
            "type": [
              "string",
              "null"
            ],
            "format": "date",
            "description": "Stores the first date on which the replenishment agreement is to be considered. Mandatory with contract_fulfillment_period = FULL, but optional otherwise.",
            "example": "2017-01-01"
          },
          "end_date": {
            "type": [
              "string",
              "null"
            ],
            "format": "date",
            "description": "Stores the last date on which the replenishment agreement is to be considered. Mandatory with contract_fulfillment_period = FULL, but optional otherwise.",
            "example": "2017-12-01"
          },
          "relative_contract_fulfillment_period_days_before": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Defines how many days preceding the order or delivery date are to be considered for a relative contract fulfillment period. A negative value is converted into a positive one in order proposal calculation. Only considered with and mandatory for contract_fulfillment_period = RELATIVE.",
            "example": 15
          },
          "relative_contract_fulfillment_period_days_after": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Defines how many days following the order or delivery date are to be considered for a relative contract fulfillment period. Only considered with and mandatory for contract_fulfillment_period = RELATIVE.",
            "example": 1
          }
        },
        "required": [
          "code",
          "name",
          "type"
        ],
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false
      },
      "retail_replenishment_agreement_request_body": {
        "type": "object",
        "required": [
          "data"
        ],
        "additionalProperties": false,
        "properties": {
          "meta": {
            "type": "object",
            "$ref": "#/components/schemas/inbound_meta"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "$ref": "#/components/schemas/retail_replenishment_agreement"
            }
          }
        }
      },
      "retail_supplier_closure": {
        "type": "object",
        "properties": {
          "supplier": {
            "type": "string",
            "description": "Supplier code",
            "example": "SUPPLIER1"
          },
          "date": {
            "type": "string",
            "format": "date",
            "description": "Date for the supplier closure",
            "example": "2018-01-01"
          },
          "closed": {
            "type": "boolean",
            "description": "Shows whether the supplier is closed for a day or not.",
            "example": true
          }
        },
        "required": [
          "supplier",
          "date",
          "closed"
        ],
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false
      },
      "retail_supplier_closure_request_body": {
        "type": "object",
        "required": [
          "data"
        ],
        "additionalProperties": false,
        "properties": {
          "meta": {
            "type": "object",
            "$ref": "#/components/schemas/inbound_meta"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "$ref": "#/components/schemas/retail_supplier_closure"
            }
          }
        }
      },
      "retail_supplier": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "minLength": 1,
            "description": "Supplier code.",
            "example": "SUPPLIER1"
          },
          "name": {
            "type": "string",
            "description": "Supplier name.",
            "example": "A shirt supplier"
          },
          "safety_lead_time": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Supplier specific safety lead time in days, it is used in order proposal calculation.",
            "example": 5
          },
          "supplier_type": {
            "type": [
              "string",
              "null"
            ],
            "description": "Supplier type can be used as a filter in metrics, business rules and views.",
            "example": "DC",
            "enum": [
              "DC",
              "EXTERNAL_SUPPLIER",
              "MANUFACTURING",
              "OTHER",
              "REGIONAL_DC",
              "STORE",
              null
            ]
          },
          "purchase_block": {
            "type": "boolean",
            "description": "Supplier purchase block. To define is it allowed to purchase good from the supplier or not.",
            "example": true
          },
          "incoterms": {
            "type": [
              "string",
              "null"
            ],
            "description": "International commercial terms agreed with the supplier.",
            "example": "CIF"
          },
          "currency": {
            "type": [
              "string",
              "null"
            ],
            "description": "Currency in which the purchases from the supplier are made.",
            "example": "EUR"
          }
        },
        "required": [
          "code",
          "name"
        ],
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false
      },
      "retail_supplier_request_body": {
        "type": "object",
        "required": [
          "data"
        ],
        "additionalProperties": false,
        "properties": {
          "meta": {
            "type": "object",
            "$ref": "#/components/schemas/inbound_meta"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "$ref": "#/components/schemas/retail_supplier"
            }
          }
        }
      },
      "outbound_list_endpoint": {
        "$schema": "http://json-schema.org/draft-04/schema#",
        "type": "object",
        "properties": {
          "meta": {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "description": "Type of the export",
                "example": "data.namespace.custom_export_resource.available"
              },
              "requested_at": {
                "type": "string",
                "description": "A timestamp of the moment the request was served",
                "example": "2024-06-12T07:03:41+00:00"
              }
            },
            "required": []
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "description": "File identifier",
                  "example": "43ee6e0c-6341-418f-a4e9-4029ec86f16a"
                },
                "timestamp": {
                  "type": "string",
                  "description": "The time when the file was exported",
                  "example": "2024-05-29T04:12:16.102371Z"
                },
                "downloaded": {
                  "type": "string",
                  "description": "Has the file been tried to download before. Set to 'false' upon file creation. A successful start of a download sets this to 'true'.",
                  "example": "false"
                },
                "url": {
                  "type": "string",
                  "description": "URL-path of the file. Use this when downloading.",
                  "example": "/data/namespace/custom_export_resource/43ee6e0c-6341-418f-a4e9-4029ec86f16a"
                },
                "resource": {
                  "type": "string",
                  "description": "Resource name",
                  "example": "custom_export_resource"
                }
              },
              "required": []
            }
          }
        },
        "required": []
      },
      "retail_sales_forecasts": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "$id": "/schema/generic_export/sales_forecasts/1.json",
        "type": "object",
        "additionalProperties": false,
        "required": [
          "meta",
          "data"
        ],
        "properties": {
          "meta": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "exported_at",
              "configured_at",
              "primary_resource",
              "schema"
            ],
            "default": {},
            "title": "Response metadata",
            "properties": {
              "exported_at": {
                "type": "string",
                "format": "date-time",
                "title": "Exported At",
                "description": "The time the content was exported",
                "example": "2024-05-29T04:12:15.267Z"
              },
              "configured_at": {
                "type": "string",
                "format": "date-time",
                "title": "Configured At",
                "description": "The time the response was configured at the host system. This can be used to detect updates for the schema.",
                "example": "2023-11-21T08:16:54.908Z"
              },
              "primary_resource": {
                "type": "string",
                "title": "Primary Resource",
                "description": "The primary resource for the data",
                "example": "sales_forecasts"
              },
              "schema": {
                "type": "string",
                "title": "Schema Path",
                "description": "The schema path for the data",
                "example": "/schema/generic_export/sales-forecasts/1.json"
              }
            }
          },
          "data": {
            "type": "array",
            "additionalProperties": false,
            "required": [],
            "title": "Data Records",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "properties": {
                "product_code": {
                  "type": "string",
                  "title": "Product code",
                  "description": "Product code in ERP system",
                  "example": "abc_7593485671"
                },
                "product_name": {
                  "type": "string",
                  "title": "Product name",
                  "description": "Product name",
                  "example": "name abc"
                },
                "location_code": {
                  "type": "string",
                  "title": "Location code",
                  "description": "Location code",
                  "example": "abc_5673485990"
                },
                "supplier_code": {
                  "type": "string",
                  "title": "Supplier code",
                  "description": "Supplier code",
                  "example": "DC1"
                },
                "date": {
                  "type": "string",
                  "format": "date",
                  "title": "Date",
                  "description": "Date of the sales forecast",
                  "example": "2024-05-29"
                },
                "effective_quantity": {
                  "type": "number",
                  "title": "Effective forecast quantity",
                  "description": "Sum of baseline quantity, campaign addition, additional quantity and external addition. Corrected quantities are used for baseline forecast, campaign addition and external addition, if set. If corrected effective quantity is set, it will override the calculated value.",
                  "example": "1.23"
                },
                "comment": {
                  "type": "string",
                  "title": "Comment",
                  "description": "Optional comment for the sales forecast.",
                  "example": "comment"
                }
              }
            }
          }
        }
      },
      "retail_order_proposals": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "$id": "/schema/generic_export/proposal-sample/1.json",
        "type": "object",
        "additionalProperties": false,
        "required": [
          "meta",
          "data"
        ],
        "properties": {
          "meta": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "exported_at",
              "configured_at",
              "primary_resource",
              "schema"
            ],
            "default": {},
            "title": "Response metadata",
            "properties": {
              "exported_at": {
                "type": "string",
                "format": "date-time",
                "title": "Exported At",
                "description": "The time the content was exported",
                "example": "2024-05-29T04:12:15.267Z"
              },
              "configured_at": {
                "type": "string",
                "format": "date-time",
                "title": "Configured At",
                "description": "The time the response was configured at the host system. This can be used to detect updates for the schema.",
                "example": "2023-11-21T08:16:54.908Z"
              },
              "primary_resource": {
                "type": "string",
                "title": "Primary Resource",
                "description": "The primary resource for the data",
                "example": "order_proposals"
              },
              "schema": {
                "type": "string",
                "title": "Schema Path",
                "description": "The schema path for the data",
                "example": "/schema/generic_export/order_proposals/1.json"
              }
            }
          },
          "data": {
            "type": "array",
            "additionalProperties": false,
            "required": [],
            "title": "Data Records",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "properties": {
                "order_number": {
                  "type": "integer",
                  "title": "Order number",
                  "description": "Row level unique order number. Can be used to identify the order.",
                  "example": 90100
                },
                "send_run_id": {
                  "type": "integer",
                  "title": "Send run id",
                  "description": "Run id (number) of the job from which the order proposal row was sent out from RELEX. Can be used for troubleshooting and identifying when a specific order was sent.",
                  "example": 1213
                },
                "product_code": {
                  "type": "string",
                  "title": "Product code",
                  "description": "Product code. Identifier of the product.",
                  "example": "abc_5648489057"
                },
                "location_code": {
                  "type": "string",
                  "title": "Location code",
                  "description": "Location code. Identifier of the location/warehouse.",
                  "example": "abc_3712470314"
                },
                "supplier_code": {
                  "type": "string",
                  "title": "Supplier code",
                  "description": "Supplier of the order proposal.",
                  "example": "abc_2648891291"
                },
                "effective_quantity": {
                  "type": "number",
                  "title": "Effective quantity",
                  "description": "Amount of products to be ordered in base unit of measure.",
                  "example": 125
                },
                "date": {
                  "type": "string",
                  "format": "date",
                  "title": "Date",
                  "description": "Order date, i.e. the date on which the purchase order is created. Current date for normal order proposals, future date for reserve order proposals.",
                  "example": "2024-05-29"
                },
                "delivery_date": {
                  "type": "string",
                  "format": "date",
                  "title": "Delivery date",
                  "description": "Requested delivery date for goods receival to location/warehouse.",
                  "example": "2024-05-29"
                },
                "second_delivery_date": {
                  "type": "string",
                  "format": "date",
                  "title": "Delivery date",
                  "description": "Next possible delivery date after the delivery date of current order proposal row for the product-location.",
                  "example": "2024-06-29"
                },
                "order_type": {
                  "type": "string",
                  "title": "Type",
                  "description": "Defines the type of the order proposal: NORMAL => Normal, SECONDARY => Secondary (i.e. not main delivery date order), EXTRA => Extra order, INITIAL_REPLENISHMENT => Campaign Initial replenishment, ALLOCATION => Allocation, FUTURE_ALLOCATION => Future allocation, FORCEOUT_ALLOCATION => Allocation: Force-out, FORCEOUT_FUTURE_ALLOCATION => Future allocation: Force-out, FILL => Fill, IN_ADVANCE => Order in advance, FUTURE => Reserve order proposal, FUTURE_SECONDARY => Reserve order proposal, secondary order, FUTURE_INITIAL_REPLENISHMENT => Reserve order proposal, campaign initial replenishment, FUTURE_FILL => Reserve order proposal, fill, DAILY => Daily order, DAILY_FILL => Daily fill order, DAILY_SECONDARY => Daily secondary order,PRE_PACK_STARTUP => Prepack startup allocation, PRE_PACK_REPLENISHMENT => Prepack replenishment allocation, PRE_ORDER => Pre-order, EXTERNAL => External order, OTG_MANUAL => Manual order created in RELEX On-the-go Replenishment",
                  "example": "NORMAL",
                  "enum": [
                    "ALLOCATION",
                    "DAILY",
                    "DAILY_FILL",
                    "DAILY_SECONDARY",
                    "EXTERNAL",
                    "EXTRA",
                    "FILL",
                    "FORCEOUT_ALLOCATION",
                    "FORCEOUT_FUTURE_ALLOCATION",
                    "FUTURE",
                    "FUTURE_ALLOCATION",
                    "FUTURE_FILL",
                    "FUTURE_INITIAL_REPLENISHMENT",
                    "FUTURE_SECONDARY",
                    "INITIAL_REPLENISHMENT",
                    "IN_ADVANCE",
                    "NORMAL",
                    "OTG_MANUAL",
                    "PRE_ORDER",
                    "PRE_PACK_REPLENISHMENT",
                    "PRE_PACK_STARTUP",
                    "SECONDARY"
                  ]
                },
                "comment_1": {
                  "type": "string",
                  "title": "Comment 1",
                  "description": "Free comment text 1. Information only, not used in calculations.",
                  "example": "comment 1"
                },
                "comment_2": {
                  "type": "string",
                  "title": "Comment 2",
                  "description": "Free comment text 2. Information only, not used in calculations.",
                  "example": "comment 2"
                }
              }
            }
          }
        }
      },
      "retail_workload_driver_forecasts_day": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "$id": "/schema/generic_export/workload_driver_forecasts_day/1.json",
        "type": "object",
        "additionalProperties": false,
        "required": [
          "meta",
          "data"
        ],
        "properties": {
          "meta": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "exported_at",
              "configured_at",
              "primary_resource",
              "schema"
            ],
            "default": {},
            "title": "Response metadata",
            "properties": {
              "exported_at": {
                "type": "string",
                "format": "date-time",
                "title": "Exported At",
                "description": "The time the content was exported"
              },
              "configured_at": {
                "type": "string",
                "format": "date-time",
                "title": "Configured At",
                "description": "The time the response was configured at the host system. This can be used to detect updates for the schema."
              },
              "primary_resource": {
                "type": "string",
                "title": "Primary Resource",
                "description": "The primary resource for the data"
              },
              "schema": {
                "type": "string",
                "title": "Schema Path",
                "description": "The schema path for the data"
              }
            }
          },
          "data": {
            "type": "array",
            "additionalProperties": false,
            "required": [],
            "title": "Data Records",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "properties": {
                "workload_driver_type_code": {
                  "type": "string",
                  "title": "Workload driver type code",
                  "description": "Identifier of the type of the workload driver"
                },
                "location_code": {
                  "type": "string",
                  "title": "Location code",
                  "description": "Identifier for location"
                },
                "effective_quantity": {
                  "type": "number",
                  "title": "Effective forecast quantity",
                  "description": "Effective forecast quantity"
                },
                "date": {
                  "type": "string",
                  "format": "date",
                  "title": "Date",
                  "description": "Defines the date of the effective forecast"
                }
              }
            }
          }
        }
      },
      "retail_workload_driver_forecasts_quarter": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "$id": "/schema/generic_export/workload_driver_forecasts_quarter/1.json",
        "type": "object",
        "additionalProperties": false,
        "required": [
          "meta",
          "data"
        ],
        "properties": {
          "meta": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "exported_at",
              "configured_at",
              "primary_resource",
              "schema"
            ],
            "default": {},
            "title": "Response metadata",
            "properties": {
              "exported_at": {
                "type": "string",
                "format": "date-time",
                "title": "Exported At",
                "description": "The time the content was exported"
              },
              "configured_at": {
                "type": "string",
                "format": "date-time",
                "title": "Configured At",
                "description": "The time the response was configured at the host system. This can be used to detect updates for the schema."
              },
              "primary_resource": {
                "type": "string",
                "title": "Primary Resource",
                "description": "The primary resource for the data"
              },
              "schema": {
                "type": "string",
                "title": "Schema Path",
                "description": "The schema path for the data"
              }
            }
          },
          "data": {
            "type": "array",
            "additionalProperties": false,
            "required": [],
            "title": "Data Records",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "properties": {
                "workload_driver_type_code": {
                  "type": "string",
                  "title": "Workload driver type code",
                  "description": "Identifier of the type of the workload driver"
                },
                "location_code": {
                  "type": "string",
                  "title": "Location code",
                  "description": "Identifier for location"
                },
                "effective_quantity": {
                  "type": "number",
                  "title": "Effective forecast quantity",
                  "description": "Effective forecast quantity"
                },
                "date": {
                  "type": "string",
                  "format": "date",
                  "title": "Date",
                  "description": "Defines the date of the effective forecast"
                },
                "time": {
                  "type": "string",
                  "format": "time",
                  "title": "Time",
                  "example": "14:15",
                  "description": "Defines the quarter of an hour of the effective forecast (hh:mm)"
                }
              }
            }
          }
        }
      }
    }
  },
  "x-tagGroups": [
    {
      "name": "Endpoints",
      "tags": [
        "Metadata",
        "Master data",
        "Transactions",
        "Custom"
      ]
    },
    {
      "name": "Customizations",
      "tags": [
        "Customizations"
      ]
    }
  ]
}