Omnia 2.0 API (0.0.7011)

Download OpenAPI specification:Download

This is the API powering Omnia 2.0 and Pricemonitor, containing operations which can also be used directly by customers from their own systems.

The Omnia 2.0 API is RESTful and provides access to the backend of Omnia 2.0 and Pricemonitor. It is used to manage products, offers, contracts and more.

Overview

Overview, explanation and pointers to the API documentation.

Introduction

The Omnia 2.0 API (also known as the Pricemonitor API) gives access to the superpowers behind the Omnia Retail platform.

The Omnia 2.0 app and the Pricemonitor app are the main consumers of this API, but we also have endpoints available to customers to integrate the API directly with their own systems.

Common use cases for Omnia 2.0

These are common API operations for customers to integrate Omnia with their own systems:

  • Retrieve market data
  • Retrieve price recommendations
  • Manage your product assortment
  • Provide offers for custom sources

Retrieve market data via API

Use this operation to retrieve the newest offers in the market for products for a given time range. It supports returning paged results. We recommend to retrieve with a page size of at most 1,000 products.

Retrieve price recommendations via API

Use this operation to retrieve the price recommendations for all products for a specified timerange. It supports returning paged results.

Query products via API

Use this operation to retrieve products via a query. It supports returning paged results. We recommend to retrieve with a page size of 10,000 products.

Manage your product assortment

Use this operation to upload your product assortment in JSON format. We recommend that you provide your product data in multiple parts via sequential requests to this endpoint. After providing all data, you need to delete the old data via this operation by specifying a timestamp just before your import.

If you cannot use the JSON format, as a fallback, we support uploading your product assortment to our system in CSV format via this operation.

Provide offers for custom sources

Use this operation to provide external offers for your products to our system.

Pagination

API endpoints can potentially return a lot of items. Returning all data as one response to one request can overload the server, the database or the client. Returning all items may even be unnecessary when the client is only interested in the top N entries. So API operations that could return a lot of data support pagination. The pagination approach used in the latest version of API operations is described here.

Pagination basics

Operations that support pagination:

  • Return a subset of all matching items based on parameters in the request. Such a subset is called a page.
    • The limit parameter defines the maximum number of items returned per page.
    • The start parameter defines which page is returned.
  • Return the requested page as an array within a data object within the response.
  • Can return all matching items by subsequently requesting multiple pages.

There are no subsequent matching items if the number of items in a response is smaller than the requested limit.

limit parameter

This parameter defines how many items are returned at most in a singe response. This is also called the page size.

The API documentation states the range that is allowed to be specified by the client.

start parameter

This parameter defines from which item in the total result set this request wants data to be returned. It basically defines what page should be returned. The index of the first item is 0. If the value of start is beyond the number of matching items, an empty data array is returned in the response.

Pagination itself only works when the entries have a stable sorting. This is the responsibility of the API.

Example of paginated requests

To request items with a page size of 1000, these are the pagination parameter values to be used for subsequent requests

request # start limit
1st 0 1000
2nd 1000 1000
3rd 2000 1000
...

So the values for each subsequent request can be calculated by start = previous start + limit. All the other parameters of the API request must keep the same value to get stable sorting for a stable total result set.

A response looks like this:

{
   "data": [
      <item 1>,
      <item 2>,
      ...
   ]
}

The client must compare the number of items in the data array with the used limit parameter. If they are equal there is likely a next page. If the number of items returned is less than the page size, there is no next page.

Note: In rare cases there is no next page even though the response has no less than a page size of items. E.g. when there are 2000 total items and using a page size of 1000. Here the client will make a request with start=1000 and limit=1000. The response for this 2nd page request will have 1000 items. Then the client can't know in advance if there are further pages and it has to make an additional request. This third page request will return an empty array.

Authentication

There are two authentication methods supported:

  • For API integration with other systems basic authentication is used.
  • The Omnia 2.0 application uses JWT bearer tokens.

BasicAuth

Security Scheme Type: HTTP
HTTP Authorization Scheme basic

BearerAuth

Security Scheme Type: HTTP
HTTP Authorization Scheme bearer
Bearer format: "JWT"

Products Management

Operations to manage your products.

Import products

We have two options: Either you provide the products as JSON or as CSV. The product import via JSON is recommended.

Notes:

  • When importing products, you need to provide an unique product identifier. We only allow importing products when they can be uniquely identified. In the very past we solely relied on GTIN for that, but not all customers have a GTIN. So we introduced the generic concept of the unique product identifier.
  • When importing products, you can additionally provide tags. These tags are key/value pairs (custom fields) which can be used to categorize your products: E.g. you could add the brand of the product.
    The tag names need to be unique and non-empty.
  • In some endpoints we use caching for up to 5 minutes. So your newly imported products might need up to 5 minutes to get visible.
  • Timing is important: It's recommended to import products during a period when no monitorings are scheduled. Otherwise, the monitoring does not cover the most recently added products. A subsequent monitoring run will cover the previously added products.

Recommended tags

To get the most value out of the Omnia 2.0 insights dashboards, we recommend to include the following tag-keys in your imports. These product attributes can be used to drill-down into market and pricing insights.

Key Description of value
brand Values should include the brand of the respective product
sku If available, you can also include the stock keeping unit identifier
amountInStock If available, you can also include the current stock level of each product
topCategory Your product categories, highest level
midCategory Your product categories, mid level
lowCategory Your product categories, lowest level
purchasePrice The purchase price of your product
imageUrl A url containing an image of your product
logisticalCost The logistical cost of your product
recommendSellingPrice The manufacturer suggested retail price or recommended retail price of your product
vat The Value Added Tax (VAT) for your product

Notes:

  • These fields are not mandatory for a successful import. They are optional, but recommended, to get the most value out of the insights in the UI of Omnia 2.0. If you intend to use them in the recommended way
  • The keys for the tags are case sensitive, so specify exactly as above.

Import products via JSON (recommended)

The preferred way to import products via API is via JSON.

This operation adds products to our system using upsert (insert or update). It needs to be used in conjunction with a timestamp-based product deletion operation.

The delete makes sure that old products, which are not part of your assortment anymore, are dropped from the system.

Typical usage pattern:

  1. Remember the current time in UTC
  2. Add products in chunks. Recommended chunk size: 1,000 products
  3. Delete old products that are not needed in the system anymore by the timestamp from step 1 minus some extra buffer, e.g. one minute.

Import products via CSV (not recommended)

In order to provide products to our system you can send a CSV file via this operation. This endpoint deactivates all current products and activates the ones which are provided via CSV.

This creates a "task" at our side. Tasks are processed asynchronously. Typically, a big product import with 500K products takes 5-10 minutes. The mentioned endpoint returns a task id and a url where you can check the task state. Possible task states are: pending, executing, failed and succeeded. The last two states are representing a completed task. The task itself contains more details about how many products could get imported, which ones failed plus a preview failure list.

When the product import successfully completed then the previously imported products have been deleted and only the ones which you have provided via CSV file are active in our system.

Query products

Use this operation to retrieve products via a query you specify in the request. It supports returning paged results. We recommend to retrieve with a page size of up to 10,000 products.

Get all products

Use the query operation and just omit the query filter in the request. Results are paginated. A page size of at most 10,000 is recommended.

Determine internal product ids from your product ids

Our system uses internal product ids that are distinct from your products ids. These internal product ids are sometimes referred to as pricemonitor product ids.

Often API operations require internal product ids to be specified. So you may need to map your product id onto our internal product id.

There are two options:

  • Either you store the internal product ids after importing products into our system. The import operation returns the internal product ids for each imported product.
  • Or you map product ids on the fly when you need to by querying specifying your product ids in the query. It's recommended to specify 1,000 product ids at once.

Get all products for a contractDeprecated

Gets all products for a contract. Does not support pagination.

SecurityBasicAuth or BearerAuth
Request
path Parameters
contractId
required
string

ID of the contract

Example: qbcxvb
query Parameters
attributes
required
string

Query string to filter products

Enum: "gtin" "identifier" "name" "referencePrice" "minPriceBoundary" "maxPriceBoundary" "tags" "strategy"
Responses
200

No response was specified

get/api/2/v/contracts/{contractId}/products
Response samples
application/json
[
  • {
    }
]

Add products in bulk (JSON)

This operation is used to import products into the system from JSON formatted data:
Products that are already present will be updated and new products will be added. Identification of the products is done based on the identifying attributes, which need to be provided via the request body.

Note:
This endpoint should be used in conjunction with: DELETE /api/v3/vendor/contracts/{contractId}/products.

Procedure:
1. Add your products in bulks with multiple requests via this endpoint.
2. Send a DELETE request to /api/v3/vendor/contracts/{contractId}/products and set the parameter updatedMax to a date which is older or equal to your first request from step 1.

SecurityBasicAuth or BearerAuth
Request
path Parameters
contractId
required
string

ID of the contract

Example: qbcxvb
header Parameters
content-type
required
string
Value: "application/json"
Example: application/json
patagona-tags-decimal-separator
required
string

The decimal separator is used for parsing numbers in tags. English and German number formats are supported: dot and comma.

Enum: "." ","
Example: .
Request Body schema: application/json
required

The body contains the products which should be added

required
Array of objects (PostProduct)

Products which should be added to the pricemonitor

version
required
string

Version of the request body. Only version 2 is supported.

Value: "2"
identifyingAttributes
required
Array of strings (PostProductsIdentifyingAttribute)

Non-empty list of product attributes which identify your products uniquely

Items Enum: "customerProductId" "gtin" "name"
Responses
200

The response provides sorted import results in respective to the order of the provided products.

400

Unable to add products because of invalid request data

post/api/v3/vendor/contracts/{contractId}/products
Request samples
application/json
{
  • "products": [
    ],
  • "version": "2",
  • "identifyingAttributes": [
    ]
}
Response samples
application/json
{
  • "data": [
    ]
}

Add products in bulk (CSV)

This operation is used to import products into the system from CSV formatted data. This process is represented by a task, which is processed asynchronously. In the response you will receive a url which is used to check the status of the import process.

When the process is done all products in csv file from the request body will be in the pricemonitor. Products that were already present before have been updated and new products have been added.

Warning: All products that were in the pricemonitor before but are not present in the new import will be deleted.

Identification of the products is done based on the identifying attributes (see parameter: patagona-product-identifying-attributes)

Note: It is recommended to use the JSON variant to add products as it works synchronously and more efficient.

SecurityBasicAuth or BearerAuth
Request
path Parameters
contractId
required
string

ID of the contract

Example: qbcxvb
header Parameters
content-type
required
string
Enum: "text/csv" "text/comma-separated-values" "text/csv; charset=UTF-8" "text/comma-separated-values; charset=UTF-8"
Example: text/csv
patagona-product-identifying-attributes
required
string

Comma separated list of csv columns that identify a product uniquely

Example: id-column
patagona-product-name
required
string

Csv column that contains the product name

Example: name-column
patagona-product-reference-price
required
string

Csv column that contains the reference price

Example: reference-price-column
patagona-product-min-price
required
string

Csv column that contains the min price

Example: min-price-column
patagona-product-max-price
required
string

Csv column that contains the max price

Example: max-price-column
patagona-product-gtin
string

Csv column that contains the gtin

Example: max-price-column
patagona-product-customer-id
string

Csv column that contains an id (There is no requirement for this field to be unique)

Example: id-column
patagona-decimal-separator
required
string

Decimal separator used for parsing numbers
The values for patagona-decimal-separator, patagona-csv-column-separator and patagona-csv-quotation-character must be different from one another.
Available values: ",", "."

Example: .
patagona-csv-column-separator
required
string

The csv column separator
It can be provided either as text or as Base64 encoded string (e.g. needed for tab as separator).
The values for patagona-decimal-separator, patagona-csv-column-separator and patagona-csv-quotation-character must be different from one another.

Example: ,
patagona-csv-quotation-character
required
string

The csv quotation character
The values for patagona-decimal-separator, patagona-csv-column-separator and patagona-csv-quotation-character must be different from one another.

Example: "
Request Body schema: text/csv
required

CSV file containing the products. Note: The CSV file should be encoded in UTF-8.

string
Responses
202

The field data.url in the returned object allows to check the status of the import process. It will point to the endpoint GET /api/2/v/contracts/{contractId}/tasks/{taskId}.
The field data.id is the task id corresponding to the product import.

put/api/v3/vendor/contracts/{contractId}/products
Response samples
application/json
{
  • "data": {
    }
}

Delete products

Delete all products or delete products by a last updated timestamp and/or a tag.

Note: Avoid any product import requests concurrently with DELETE requests to prevent potential issues.

SecurityBasicAuth or BearerAuth
Request
path Parameters
contractId
required
string

ID of the contract

Example: qbcxvb
query Parameters
updatedMax
string <date-time>

Last updated timestamp of products, formatted as ISO Date (i.e. 2019-11-20T13:46:13Z) in UTC.
Products can be deleted which haven't been updated since the specified timestamp.
If the query parameter is missing all products are deleted.

tagKey
string

Tag key to consider for deleting products. This parameter works in combination with tagValue.

tagValue
string

Tag value to consider for deleting products. This parameter works in combination with tagKey.

Responses
200

Returns the number of deleted products.

400

Tags specified for deleting products are specified partially (either tagKey or tagValue is provided).

delete/api/v3/vendor/contracts/{contractId}/products
Response samples
application/json
{
  • "data": {
    }
}

Return the extended tags for the given product

SecurityBasicAuth or BearerAuth
Request
path Parameters
contractId
required
string

ID of the contract

Example: qbcxvb
productId
required
string

ID of the product

Example: 1
Responses
200

Returns a list of ExtendedTags for the given product.

404

Given product does not exist.

get/api/v3/vendor/contracts/{contractId}/products/{productId}/extendedtags
Response samples
application/json
{
  • "data": [
    ]
}

Get monitoring status of queried products

SecurityBasicAuth or BearerAuth
Request
path Parameters
contractId
required
string

ID of the contract

Example: qbcxvb
query Parameters
productIds
required
Array of integers [ 1 .. 1000 ] items unique

The product ids for which the monitoring state should be returned

Responses
200

Monitoring status of the queried products

get/api/v3/vendor/contracts/{contractId}/products/monitoringstatus
Response samples
application/json
{
  • "data": [
    ]
}

Get price recommendations for one product

This endpoint returns all price recommendations for one product within a given time range.

SecurityBasicAuth or BearerAuth
Request
path Parameters
contractId
required
string

ID of the contract

Example: qbcxvb
productId
required
string

ID of the product in pricemonitor

Example: 862342
query Parameters
startDate
string <date-time>

Timestamp of start of time range, formatted as ISO Date (i.e. 2018-04-06T13:46:13Z) in UTC. If this value is omitted and {endDate} is given, {startDate} is set to {endDate} - 48 hours. If both values are omitted, the range is 'NOW - 48 hours to NOW'.

endDate
string <date-time>

Timestamp of end of time range, formatted as ISO Date (i.e. 2018-04-06T13:46:13Z) in UTC. If this value is omitted and {startDate} is given, {endDate} is set to {startDate} + 48 hours. If both values are omitted, the range is 'NOW - 48 hours to NOW'.

Responses
200

A list of price recommendations

400

E.g. when the time range spans more than 48h.

get/api/v3/vendor/contracts/{contractId}/products/{productId}/pricerecommendationhistory
Response samples
application/json
{
  • "data": [
    ]
}

Query products of a contract

This endpoint can be used for querying either all products or certain products by the 'customerProductId' or 'productId'.

SecurityBasicAuth or BearerAuth
Request
path Parameters
contractId
required
string

ID of the contract

Example: qbcxvb
Request Body schema: application/json

The body contains the products query.
Currently, it supports only product queries for two attributes:

  • by "customerProductId"
  • by "productId" (Patagona's internal product id). Allowed values for 'productId' are numerical integer values
The maximum allowed limit in the pagination is 10000.
For better performance, when paginating over all products of a contract, we recommend to use a limit of 10000 products per page. Pagination works with respective to the given products query.
This is most relevant when querying for a set of customerProductId's.
When the requests are chunked over a set of ids, it is easiest to provide up to 10000 customerProductId's in the query and keep the pagination at start: 0, limit: 10000.
It also contains a boolean optional parameter 'includeTags' which is used to include the tags of the products in the response.
The only allowed pattern is currently:
{
  "pagination": {
    "start": ${start},
    "limit": ${limit}
  },
  "filter": {
    "oneOf": {
      "field": "customerProductId",
      "values": [${customerProductIds as a list of strings}]
    }
  },
  "includeTags": ${includeTags}
}

example:
{
  "pagination": {
    "start": 0,
    "limit": 10
  },
  "filter": {
  "oneOf": {
      "field": "customerProductId",
      "values": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]
    }
  },
  "includeTags": true
}
required
object (com.patagona.pricemonitor.share.api.Pagination)

This model describes a step in a paginated endpoint. It consists of the start index, set to 0 for the first page. The next page starts at (previous start) + limit. Reasonable values for the limit parameter depend on the specific endpoint.

object (com.patagona.pricemonitor.share.api.Query)

This class specifies a general query language, even though all fields are marked as optional, exactly one has to be specified. Please note that depending on the endpoint only a subset of the query language might be supported. Refer to the endpoint specific documentation to view the restrictions.

includeTags
boolean

Whether to include tags in the response or not

Responses
200

Returns a list of found products.

post/api/v3.1/vendor/contracts/{contractId}/products/query
Request samples
application/json
{
  • "pagination": {
    },
  • "filter": {
    },
  • "includeTags": true
}
Response samples
application/json
{
  • "data": [
    ]
}

Get Amazon Buy Box statistics for time range

Provides latest Amazon Buy Box statistics, i.e., whether a

  • product is in Amazon Buy Box for Prime users
  • product is in Amazon Buy Box for Non-Prime users per product per Amazon domain for a given time range.
SecurityBasicAuth or BearerAuth
Request
path Parameters
contractId
required
string

ID of the contract

Example: qbcxvb
query Parameters
startDate
string <date-time>

Timestamp of start of time range, formatted as ISO Date (i.e. 2018-04-06T13:46:13Z) in UTC. If this value is omitted and {endDate} is given, {startDate} is set to {endDate} - 48 hours. If both values are omitted, the range is 'NOW - 48 hours to NOW'.

endDate
string <date-time>

Timestamp of end of time range, formatted as ISO Date (i.e. 2018-04-06T13:46:13Z) in UTC. If this value is omitted and {startDate} is given, {endDate} is set to {startDate} + 48 hours. If both values are omitted, the range is 'NOW - 48 hours to NOW'.

start
integer <int32>

Where to start fetching the Amazon Buy Box statistics. Must be positive. Default value is 0.

limit
integer <int32>

Maximum number of results. Must be positive and not bigger than 50,000. Default value is 50,000.

Example: limit=50000
Responses
200

List of Amazon Buybox statistics per product

400

Returned if:

  • The request body is not a valid JSON string.
  • The start date is after the end date.
  • The time range [startDate,endDate] is larger than 48h.
  • The start parameter is negative
  • The limit parameter is negative and larger than 50,000
  • The contract has more than one amazon domain configured.
get/api/v3/vendor/contracts/{contractId}/products/amazon/buybox/stats
Response samples
application/json
{
  • "data": [
    ]
}

Price Recommendations

Operations to get price recommendations calculated by our system.

Price recommendations and multiple domains

Note:

  1. Internally the system calculates a price recommendation for every domain
  2. As aggregation the system then provides the cheapest price recommendation

Within the price recommendations we are providing a field called relevantDomain. This field contains from which domain the price recommendation originates.

Retrieve price recommendations

Getting all price recommendations

You can get all price recommendations via this operation.

It's a paginated endpoint, so you have to request multiple pages. See pagination. Recommended page size is 1000.

It's important that you define a timerange (by providing startTime and endTime parameters) in order to guarantee a stable pagination. This endpoint returns the most recent price recommendations per product and domain: This means that price recommendations from older price calculation runs within the provided timerange are ignored.

Get all price recommendations

Gets all price recommendations for a contract for the specified timerange. Only the newest price recommendations are returned in case of multiple price recommendations per product

SecurityBasicAuth or BearerAuth
Request
path Parameters
contractId
required
string

ID of the contract

Example: qbcxvb
query Parameters
startTime
required
string <date-time>

Timestamp of start of time range, formatted as ISO Date (i.e. 2018-04-06T13:46:13Z) in UTC

endTime
required
string <date-time>

Timestamp of end of time range, formatted as ISO Date (i.e. 2018-04-06T13:46:13Z) in UTC

start
required
integer <int32>

Start price-recommendation index for pagination

limit
integer <int32>
Default: 100

Number of price-recommendations for pagination

includeTags
boolean
Default: true

Whether to return tags of products or not.

Responses
200

A paginated list of price recommendations is returned for the specified timerange. Only the newest price recommendations are returned in case of multiple price recommendations per product.

get/api/2/v/contracts/{contractId}/result/pricerecommendations
Response samples
application/json
{
  • "data": [
    ],
  • "meta": {
    }
}

Get price recommendations for one product

This endpoint returns all price recommendations for one product within a given time range.

SecurityBasicAuth or BearerAuth
Request
path Parameters
contractId
required
string

ID of the contract

Example: qbcxvb
productId
required
string

ID of the product in pricemonitor

Example: 862342
query Parameters
startDate
string <date-time>

Timestamp of start of time range, formatted as ISO Date (i.e. 2018-04-06T13:46:13Z) in UTC. If this value is omitted and {endDate} is given, {startDate} is set to {endDate} - 48 hours. If both values are omitted, the range is 'NOW - 48 hours to NOW'.

endDate
string <date-time>

Timestamp of end of time range, formatted as ISO Date (i.e. 2018-04-06T13:46:13Z) in UTC. If this value is omitted and {startDate} is given, {endDate} is set to {startDate} + 48 hours. If both values are omitted, the range is 'NOW - 48 hours to NOW'.

Responses
200

A list of price recommendations

400

E.g. when the time range spans more than 48h.

get/api/v3/vendor/contracts/{contractId}/products/{productId}/pricerecommendationhistory
Response samples
application/json
{
  • "data": [
    ]
}

Offers

Operations to get and manage offers.

Provide offers for custom sources

Use this operation to provide external offers for your products to our system. This operation to add offers in bulk can be used instead of the monitoring by our system of domains for external offers.

This operation needs the internal product ids in our system. See how to determine internal product ids.

Example

Here is an example of a JSON body to provide one offer for one product via API.

Click to expand
[{
    "productId": "67784570",
    "creationDate": "2024-06-11T00:15:07.099Z",
    "domain": "google.de",
    "offers": [{
        "vendorName": "amazon.de",
        "vendorDomainId": 1,
        "url": "https://www.amazon.de/-/en/dp/013142467X/",
        "price": 58.84,
        "deliveryCosts": 9.95,
        "currency": "EUR",
        "id": "636354d0-c865-4c56-84b3-bd9172e826aa",
        "productName": "Test item",
        "attributes": [{
            "key": "size",
            "value": "L"
        }],
        "maxDeliveryHours": 48,
        "minDeliveryHours": 12,
        "retrievalDate": "2024-06-11T10:50:45.659Z",
        "availability": true
    }]
}]

Retrieve offers

Use this operation to get all offers for a contract. It's a paginated endpoint, so you have to scroll through all offers.

It's important that you define a timerange (by providing startDate and endDate parameters) in order to guarantee a stable pagination.

This endpoint returns the most recent offers per product and domain: This means that offers from older monitoring runs within the provided timerange are ignored.

Continuously retrieving offers

For continuously getting market data we recommend the following usage pattern:

Get the offers for the last 15 minutes with a time offset of 15 minutes.

Runtime Timestamp startDate endDate
12:00 11:30 11:45
12:15 11:45 12:00
12:30 12:00 12:15

Note: The time offset is important since offers are not immediately visible via the API. Sometimes there is a slight delay in offer storing.

Get offers for timerange

Returns the newest offers for a given time range.

SecurityBasicAuth or BearerAuth
Request
path Parameters
contractId
required
string

ID of the contract

Example: qbcxvb
query Parameters
start
integer <int32>
Default: 0

Where to start fetching the products

limit
integer <int32>
Default: 1000

Maximum number of results

Example: limit=1000
includeTags
boolean
Default: true

Whether to return tags of products or not.

startDate
string <date-time>

Timestamp of start of time range, formatted as ISO Date (i.e. 2018-04-06T13:46:13Z) in UTC. If this value is omitted and {endDate} is given, {startDate} is set to {endDate} - 48 hours. If both values are omitted, the range is 'NOW - 48 hours to NOW'.

endDate
string <date-time>

Timestamp of end of time range, formatted as ISO Date (i.e. 2018-04-06T13:46:13Z) in UTC. If this value is omitted and {startDate} is given, {endDate} is set to {startDate} + 48 hours. If both values are omitted, the range is 'NOW - 48 hours to NOW'.

Responses
200

A list of products with their corresponding offers.

400

Returned in case of invalid time range or a limit greater than 10000.

get/api/v3/vendor/contracts/{contractId}/offers
Response samples
application/json
{
  • "data": [
    ]
}

Query offers [vendor]

Supports complex queries for offers.

SecurityBasicAuth or BearerAuth
Request
path Parameters
contractId
required
string

ID of the contract

Example: qbcxvb
Request Body schema: application/json
required

The request body specifies which offers will be searched for.
Warning: It's highly recommended to not use this endpoint since it is error-prone due to complex query structure! Supported are queries with three different types of filters:

  1. Filtering for offers of a certain product
    This can be done by a ComparisonFilter with
  • the left side being a StringValueProvider with the attributeName value "productId"
  • the right side being a StringConstantValueProvider with the value being the actual pricemonitor product ID to filter offers for
  • the comparison being a StringEquality
  1. Filtering for valid offers of a certain product
    This can be done by an AndFilter with
  • a) A product filter (see first supported filter)
  • b) A NotFilter which contains a ComparisonFilter
    • the left side being a NumberValueProvider with the attributeName value "ignoredBy"
    • the right side being a NumberConstantValueProvider with the value being the numeric contract id to filter offers for
    • the comparison being a NumberEquality
  1. Filtering for offers of a certain vendor
    This can be done by a ComparisonFilter with
  • the left side being a StringValueProvider with the attributeName value "reseller_name"
  • the right side being a StringConstantValueProvider with the value being the actual vendor name to filter offers for
  • the comparison being a StringEquality

Note: This endpoint will only return the newest offers for each product for a given time range.

filter
object (GenericFilter)

This is a placeholder for filter expressions. They are using advanced features and are not covered by openapi. If you need to use filter expressions please contract us.

required
object (Pagination)
required
object (TimeRange)
object (OffersQuerySortOrderV30)
Responses
200

Returns either an Error or a list of ApiOffers matching the given filter.

400

Returned in case of unparsable request JSON or unsupported filter/sorting.

post/api/v3/vendor/contracts/{contractId}/offers/query
Request samples
application/json
{
  • "filter": { },
  • "pagination": {
    },
  • "range": {
    },
  • "sort": {
    }
}
Response samples
application/json
{
  • "data": [
    ]
}

Query offer statistics per product

This endpoint can be used to query offer statistics (e.g. offer count, average price) grouped by product. Only the most recent market data is considered per product and domain.

SecurityBasicAuth or BearerAuth
Request
path Parameters
contractId
required
string

ID of the contract

Example: qbcxvb
Request Body schema: application/json

The request body may include an optional products query. If omitted, all products are queried. Currently, product queries can be performed on two attributes:

  • "customerProductId"
  • "productId" (Patagona's internal product id; must be a numerical integer)

Pagination is supported with a maximum limit of 10,000. For optimized performance:

  • Use a limit of 10,000 products per page when querying all products of a contract.
  • Prefer using "productId" for queries when a product query is utilized.

Pagination operates based on the provided products query. This is particularly useful when querying a set of customerProductId's. For chunked requests over a set of ids, it's straightforward to specify up to 10,000 customerProductId's in the query with pagination set at start: 0, limit: 10,000. The allowed query pattern is structured as follows:

json { "pagination": { "start": ${start}, "limit": ${limit} }, "range": { "start": ${start}, "end": ${end} }, "filter": { "oneOf": { "field": "customerProductId", "values": [${customerProductIds as a list of strings}] } } }

required
object (com.patagona.pricemonitor.share.api.Pagination)

Specifies the pagination details such as the start index and the number of records to fetch (limit). At maximum it's allowed to query 10,000 records.

required
object (com.patagona.pricemonitor.share.api.ZonedTimeRange)

Defines the time range for which offer statistics are queried. Note: The maximum time span between the start and end should not exceed 48 hours.

object (com.patagona.pricemonitor.share.api.OneOfProductsQuery)

An optional parameter to further filter the data based on product criteria.

Responses
200

Returns a list of offer statistics per product. When a product has no market data then no offer statistics are returned for that product.

400

A 400 error is returned under the following conditions:

  • The request body JSON is unparsable.
  • An unsupported filter is provided.
  • The specified time range exceeds 48 hours.
  • The pagination limit exceeds 10,000.
post/api/v3.1/vendor/contracts/{contractId}/offers/stats/query
Request samples
application/json
{
  • "pagination": {
    },
  • "range": {
    },
  • "filter": {
    }
}
Response samples
application/json
{
  • "data": [
    ]
}

Add offers in bulk

This endpoint can be used to provide external offers to Pricemonitor. It's a bulk endpoint which accepts an array of individual POST offers requests each based on a "snapshot" - a unique combination of product, domain, and timestamp for a list of offers. Please note the following consistency checks performed before offers are stored:

  1. Offers can only be stored if the corresponding products exist in the contract.
  2. Offers can only be stored if they are more recent than existing offers. This means that only newer snapshots are eligible for storage.
  3. Offers can only be stored if the currency is consistent. In other words, a single domain must use only one currency.
  4. Duplicated individual POST offers requests are stored only once.
  5. If different offers are provided for the same snapshots, then all conflicting snapshots will be rejected.
  6. An individual POST offers request may be rejected if the offer ID is not unique.
  7. Offers can only be stored if the domain is not empty.
  8. Offers that have non-negative prices and non-negative or zero delivery costs can be stored.
SecurityBasicAuth or BearerAuth
Request
path Parameters
contractId
required
string

ID of the contract

Example: qbcxvb
Request Body schema: application/json
required

List of individual POST offers requests which should be added in bulk.

Array
productId
required
string

Patagona's internal product id.

creationDate
required
string <date-time>

ISO 8601 timestamp when the offers have been gathered. This timestamp needs to be more recent compared to already existing offers. Otherwise, the offers will be rejected.

domain
required
string

Origin of the offers.

required
Array of objects (com.patagona.pricemonitor.share.api.ApiOfferV2)

Non-empty list of offers.

Responses
200

The server understood and processed the request. Offers were processed, but not necessarily stored successfully. The 'data' field in the response body contains a detailed report of the operation outcome for each individual POST offers requests. Each item in the 'data' array is either a 'data' object with value true (indicating successful storage), or an ApiErrorResponse (indicating a storage failure).

400

The server could not understand the request due to invalid syntax. For example, a required field might be missing in the request body.

post/api/2/v/contracts/{contractId}/offers
Request samples
application/json
[
  • {
    }
]
Response samples
application/json
{
  • "data": [
    ]
}

Feeds Management

Manage your data-feeds.

Get all feeds

Feeds can contain offer-related information such as price recommendations. They can be configured to match individual demands.

SecurityBasicAuth or BearerAuth
Request
path Parameters
contractId
required
string

ID of the contract

Example: qbcxvb
Responses
200

No response was specified

get/api/2/v/contracts/{contractId}/feeds
Response samples
application/json
[
  • {
    }
]

Find feed by ID

A feed can contain offer-related information such as price recommendations. Feeds can be configured to match individual demands.

SecurityBasicAuth or BearerAuth
Request
path Parameters
contractId
required
string

ID of the contract

Example: qbcxvb
feedId
required
string

ID of the feed

Responses
200

No response was specified

404

Not found

get/api/2/v/contracts/{contractId}/feeds/{feedId}
Response samples
application/json
{
  • "contractId": "string",
  • "csvDecimalSeparator": "string",
  • "csvSeparator": "string",
  • "deltaUrl": "string",
  • "fields": [
    ],
  • "format": "string",
  • "id": "string",
  • "lastAccessed": "2019-08-24T14:15:22Z",
  • "lastDeletion": "2019-08-24T14:15:22Z",
  • "name": "string",
  • "url": "string",
  • "version": 0
}

Dismiss already fetched feed-entries

Dismiss already fetched feed-entries, so they will not be part of future responses.

SecurityBasicAuth or BearerAuth
Request
path Parameters
contractId
required
string

ID of the contract

Example: qbcxvb
feedId
required
string

ID of the feed

Responses
200

No response was specified

404

Not found

delete/api/2/v/contracts/{contractId}/feeds/{feedId}/export/delta
Response samples
application/json
{
  • "contractId": "string",
  • "csvDecimalSeparator": "string",
  • "csvSeparator": "string",
  • "deltaUrl": "string",
  • "fields": [
    ],
  • "format": "string",
  • "id": "string",
  • "lastAccessed": "2019-08-24T14:15:22Z",
  • "lastDeletion": "2019-08-24T14:15:22Z",
  • "name": "string",
  • "url": "string",
  • "version": 0
}

Retrieve all feed-entries after last request

In contrast of normal feeds, feed-deltas return only results, that are new since the last (DELETE-)request.

SecurityBasicAuth or BearerAuth
Request
path Parameters
contractId
required
string

ID of the contract

Example: qbcxvb
feedId
required
string

ID of the feed

fileName
required
string
Default: "my-feed.csv"

fileName

Responses
200

No response was specified

404

Not found

get/api/2/v/contracts/{contractId}/feeds/{feedId}/export/delta/{fileName}
Response samples
{
  • "contractId": "string",
  • "csvDecimalSeparator": "string",
  • "csvSeparator": "string",
  • "deltaUrl": "string",
  • "fields": [
    ],
  • "format": "string",
  • "id": "string",
  • "lastAccessed": "2019-08-24T14:15:22Z",
  • "lastDeletion": "2019-08-24T14:15:22Z",
  • "name": "string",
  • "url": "string",
  • "version": 0
}

Export feed data

Lets you download a file, containing all the data of the feed.

SecurityBasicAuth or BearerAuth
Request
path Parameters
contractId
required
string

ID of the contract

Example: qbcxvb
feedId
required
string

ID of the feed

fileName
required
string
Default: "my-feed.csv"

fileName

Responses
200

No response was specified

404

Not found

get/api/2/v/contracts/{contractId}/feeds/{feedId}/export/{fileName}
Response samples
{
  • "contractId": "string",
  • "csvDecimalSeparator": "string",
  • "csvSeparator": "string",
  • "deltaUrl": "string",
  • "fields": [
    ],
  • "format": "string",
  • "id": "string",
  • "lastAccessed": "2019-08-24T14:15:22Z",
  • "lastDeletion": "2019-08-24T14:15:22Z",
  • "name": "string",
  • "url": "string",
  • "version": 0
}

Logs Management

Operations to store log messages in our system.

You could integrate this API in your own system and publish the integration logs to our system so that Omnia Retail could analyze them.

Store log messages

Stores log messages in the platform. This endpoint aims to improve the API integration process.

SecurityBasicAuth or BearerAuth
Request
Request Body schema: application/json
required
version
string

The version parameter should always be 1.

Value: "1"
Array of objects (LogMessage)
Responses
200

The logs have been stored successfully.

post/api/v3/log/messages
Request samples
application/json
{
  • "version": "1",
  • "messages": [
    ]
}

Company Management

Company management related endpoints.

Create company

Allows users without a company to create a new company.

SecurityBasicAuth or BearerAuth
Request
Request Body schema: application/json
required

The company's name

string
Responses
200

Information about the created company.

400

The company name may not be empty.

403

User already belongs to a company.

500

The company could not be created.

post/api/2/companies
Request samples
application/json
"string"
Response samples
application/json
{
  • "data": {
    }
}

Get all contracts for company

Get all contracts for the given company.

SecurityBasicAuth or BearerAuth
Request
path Parameters
companyId
required
integer <int64>

ID of a company

Example: 1
Responses
200

No response was specified

get/api/2/companies/{companyId}/contracts
Response samples
application/json
{
  • "data": [
    ]
}

Add contract for company

Add a contract for the given company.

SecurityBasicAuth or BearerAuth
Request
path Parameters
companyId
required
integer <int64>

ID of a company

Example: 1
Request Body schema: application/json
required

Contract to be added

contractType
required
string

Type of the contract. Currently, only 2 types are supported: - Pricemonitor for manufacturers - Pricemonitor for resellers

contractName
required
string

Name of the new contract

expirationDate
string <date-time>

Expiration date

Responses
200

No response was specified

400

Unable to add contract for company ID

post/api/2/companies/{companyId}/contracts
Request samples
application/json
{
  • "contractType": "string",
  • "contractName": "string",
  • "expirationDate": "2019-08-24T14:15:22Z"
}
Response samples
application/json
{
  • "data": {
    }
}

Orders Management

Manage your orders.

Add orders in bulk

SecurityBasicAuth or BearerAuth
Request
path Parameters
contractId
required
string

ID of the contract

Example: qbcxvb
Request Body schema: application/json
required

Orders to be added

required
Array of objects (com.patagona.pricemonitor.share.api.CustomerOrderV2)

Orders in bulk

version
required
string

Version of orders

Responses
200

Successfully added orders

400

Unable to add orders

post/api/2/v/contracts/{contractId}/orders
Request samples
application/json
{
  • "orders": [
    ],
  • "version": "string"
}
Response samples
application/json
{
  • "data": [
    ]
}

Delete all orders

Delete all orders for this contract.

SecurityBasicAuth or BearerAuth
Request
path Parameters
contractId
required
string

ID of the contract

Example: qbcxvb
Responses
200

Successfully deleted all orders

delete/api/v3/vendor/contracts/{contractId}/orders
Response samples
application/json
{
  • "data": {
    }
}

PUT orders in bulk

Saves orders in bulk. If an orderId was already used by this contract this order and all it's order-items will be overwritten.

  • the version of the request body must be "3"
  • requests must not contain duplicated orderId
  • the number of orders in one request must not exceed 10,000
  • each order must have at least one item
  • the orders.items.itemId fields should correspond to a customerProductId of a product definition inside the contract
SecurityBasicAuth or BearerAuth
Request
path Parameters
contractId
required
string

ID of the contract

Example: qbcxvb
Request Body schema: application/json
required
Array of objects (com.patagona.pricemonitor.share.api.CustomerOrderV3)

List of orders

version
required
string

Version of orders. Currently only "3" is allowed

Responses
201

The response provides the ids of the successfully imported orders

400

Unable to add orders because of invalid request data

put/api/v3/vendor/contracts/{contractId}/orders
Request samples
application/json
{
  • "orders": [
    ],
  • "version": "3"
}
Response samples
application/json
{
  • "data": {
    }
}

Get all orders

Returns all orders for a given contract.

SecurityBasicAuth or BearerAuth
Request
path Parameters
contractId
required
string

ID of the contract

Example: qbcxvb
query Parameters
start
required
integer <int32>
limit
required
integer <int32>
startDate
string <date-time>

Timestamp of start of time range for fetching orders. Formatted as ISO 8601 format with timezone with reference to UTC (e.g. for [Europe/Berlin] in winter time: 2023-11-01T14:50:45.495+01:00. In summer time: 2023-11-01T14:50:45.495+02:00). If this value is omitted then no lower time limit is considered.

endDate
string <date-time>

Timestamp of end of time range for fetching orders. Formatted as ISO 8601 format with timezone with reference to UTC (e.g. for [Europe/Berlin] in winter time: 2023-11-01T14:50:45.495+01:00. In summer time: 2023-11-01T14:50:45.495+02:00). If this value is omitted then no upper time limit is considered.

Responses
200

This is a generated entry and needs to be described.

get/api/v3/vendor/contracts/{contractId}/orders
Response samples
application/json
{ }

Query order statistics per product

This endpoint can be used to query order statistics grouped by product.

SecurityBasicAuth or BearerAuth
Request
path Parameters
contractId
required
string

ID of the contract

Example: qbcxvb
Request Body schema: application/json
required

The request body may include an optional products query. If omitted, all products are queried. Currently, product queries can be performed on two attributes:

  • "customerProductId"
  • "productId" (Patagona's internal product id; must be a numerical integer)

Pagination is supported with a maximum limit of 10,000. For optimized performance:

  • Use a limit of 10,000 products per page when querying all products of a contract.
  • Prefer using "customerProductId" for queries when a product query is utilized.

Pagination operates based on the provided products query. For chunked requests over a set of ids, it's straightforward to specify up to 10,000 customerProductId's in the query with pagination set at start: 0, limit: 10,000.

The allowed query pattern is structured as follows:

{
  "pagination": {
    "start": ${start},
    "limit": ${limit}
  },
  "range": {
    "start": ${start},
    "end": ${end}
  },
  "filter": {
    "oneOf": {
      "field": "customerProductId",
      "values": [${customerProductIds as a list of strings}]
    }
  }
}

required
object (com.patagona.pricemonitor.share.api.Pagination)

Specifies the pagination details such as the start index and the number of records to fetch (limit). At maximum it's allowed to query 10,000 records.

required
object (com.patagona.pricemonitor.share.api.ZonedTimeRange)

Defines the time range for which order statistics are queried. Note: The maximum time span between the start and end should not exceed 30 days.

object (com.patagona.pricemonitor.share.api.OneOfProductsQuery)

An optional parameter to further filter the data based on product criteria.

Responses
200

Returns a list of order statistics per product. When a product has no sold items then no order statistics are returned for that product.

400

A 400 error is returned under the following conditions:

  • The request body JSON is unparsable.
  • An unsupported filter is provided.
  • The specified time range exceeds 30 days.
  • The pagination limit exceeds 10,000.
post/api/v3/vendor/contracts/{contractId}/orders/stats/query
Request samples
application/json
{
  • "pagination": {
    },
  • "range": {
    },
  • "filter": {
    }
}
Response samples
application/json
{
  • "data": [
    ]
}

Delete orders by query

This endpoint can be used to delete customer orders by an order query

SecurityBasicAuth or BearerAuth
Request
path Parameters
contractId
required
string

ID of the contract

Example: qbcxvb
Request Body schema: application/json
required

The request body should contain a list of order queries. Each query should contain an order id and creation date.

The allowed query pattern is structured as follows:

{
  "orders": [
   {
    "orderId": ${orderId},
    "creationDate": ${creationDate}
  }
   ]
}

required
Array of objects (com.patagona.pricemonitor.share.api.DeleteOrderQueryV3)

List of order queries, each query should include an order id and its corresponding creation date

Responses
200

Returns the number of orders that have been deleted successfully

400

A 400 error is returned under the following conditions:

  • The request body JSON is unparsable.
  • The provided order queries exceeds 10,000.
post/api/v3/vendor/contracts/{contractId}/orders/delete/query
Request samples
application/json
{
  • "orders": [
    ]
}
Response samples
application/json
{
  • "data": {
    }
}

Settings Management

Operations to manage the settings of contracts. Only a limited number of these operations are available to customers directly.

Callbacks

You can register HTTP(S) callbacks in Omnia 2.0, which function as webhooks. Callbacks are triggered at the contract level when specific events occur within the system.

Please note that multiple parties can register callbacks, so when modifying callbacks, you must ensure that you do not overwrite or delete callbacks registered by other parties. We strongly recommend including a unique name for each callback to help you identify them later.

Callbacks are executed asynchronously as tasks within our system. To monitor the execution of these callbacks, you can track the corresponding tasks with the task type backend.tasks.pricemonitor.callback.

For added security, you can register a token with your callback and/or whitelist our IP range to ensure secure communication.

Set domains for contract

SecurityBasicAuth or BearerAuth
Request
path Parameters
contractId
required
string

ID of the contract

Example: qbcxvb
Request Body schema: application/json
required

Settings

Array
string
Responses
200

The domains setting for this contract was saved.

404

Settings for this contract do not exist yet

put/api/2/v/contracts/{contractId}/settings/domains
Request samples
application/json
[
  • "string"
]

Get callbacks

Retrieve all callbacks for the given contract.

SecurityBasicAuth or BearerAuth
Request
path Parameters
contractId
required
string

ID of the contract

Example: qbcxvb
Responses
200

Returns a list of all configured callbacks for certain events. These callbacks are executed once the respective event has been successfully completed.

404

Contract settings for this contract don't exist yet.

get/api/2/v/contracts/{contractId}/settings/callbacks
Response samples
application/json
{
  • "pricemonitorCompleted": [
    ]
}

Update callbacks

Create or update callbacks for the given contract. This is used to upsert (insert or update) all callbacks at once. Keep in mind that callbacks can be used by multiple parties (Omnia internal, Omnia Plugins, Users). It's strongly recommended to provide your callbacks with a unique name to easily identify them later. To update a single callback, you must also provide all other callbacks to ensure no callbacks from other parties are lost. To delete all callbacks, you can provide an empty list.

SecurityBasicAuth or BearerAuth
Request
path Parameters
contractId
required
string

ID of the contract

Example: qbcxvb
Request Body schema: application/json

The request body should contain a list of callbacks to be stored.

required
Array of objects (com.patagona.pricemonitor.share.api.Callback)

A list of callbacks that are triggered when the "Pricemonitor Completed" event occurs, which means:
1. A monitoring task (fetching offers) has successfully finished, and/or
2. The price recommendation calculation task has been completed.

Responses
200

Returns the callbacks that have been successfully stored.

404

Contract settings for this contract don't exist yet

put/api/2/v/contracts/{contractId}/settings/callbacks
Request samples
application/json
{
  • "pricemonitorCompleted": [
    ]
}
Response samples
application/json
{
  • "pricemonitorCompleted": [
    ]
}

Tasks Management

Operations to view and manage the tasks running in the platform. Customers can only view tasks.

What tasks are

Tasks are asynchronously handled jobs in our system, like price calculation or monitoring jobs.

You can use this operation to find tasks for a contract.

Price calculation tasks

A use case for the find tasks operation is to get the most recent completed price calculation task to see if it was successful or failed. And if it failed, what the failures were.

Finding most recent price calculation tasks

If you want to find the most recent completed price calculation task you need the following query parameters:

limit=1
includeFailures=true
taskTypeFilter=backend.tasks.pricemonitor.offers.preprocessing
taskState=succeeded,failed    // this only returns completed tasks. Currently running tasks are ignored

Optional: You might want to adjust the queried timerange and specify minCreationDate and maxCreationDate. By default all tasks ever are queried.

It can happen that there no price calculation has been run yet, then an empty list of tasks is returned.

Apart from that these are the possible task states:

Task state Description
succeeded At least for one product a price calculation has been calculated
failed Either all price calculations for every product failed OR the whole price calculation process failed due to an unexpected error

If there are price calculation failures on a product level, you find the dedicated failures in the failures array of the task. Be aware: at most 1000 failures are returned.

If you want to have statistics for how many products a price has been calculated and how many price calculations failed on product level, then please take a look at the result.operations.<successful/failed/total> fields in the response.

When a task completely fails then the response also provides a failureCode that is of interest.

Example Responses

Successful task

Click to expand
{
  "state":"succeeded",
  "data":{
    "startTimestamp":"2023-05-08T14:40:00.213Z"
  },
  "result":{
    "operations":{
      "successful":28444,
      "failed":0,
      "total":28444
    }
  },
  "contractId":"gj8qu6",
  "failures":[

  ],
  "creationDate":"2023-05-08T15:41:46.545Z",
  "taskType":"backend.tasks.pricemonitor.offers.preprocessing",
  "finishDate":"2023-05-08T15:44:58.853Z",
  "userId":2156,
  "startDate":"2023-05-08T15:41:46.555Z",
  "taskId":"gj8qu6:1e318eee-3217-4ee7-a380-c6312935dcd1"
}

Successful task with failures for some products

Click to expand
{
  "state":"succeeded",
  "data":{
    "startTimestamp":"2023-05-07T10:05:00.230Z"
  },
  "result":{
    "operations":{
      "successful":2737,
      "failed":24,
      "total":2761
    }
  },
  "contractId":"f8kfq5",
  "failures":[
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"57282163",
        "exceptionMessage":"Can't modify min price to 21.6 since it violates the current boundary PriceBoundary(24.00,24.00)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"57316814",
        "exceptionMessage":"Can't modify min price to 35.1 since it violates the current boundary PriceBoundary(35.15,39.00)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"57282223",
        "exceptionMessage":"Can't modify min price to 35.1 since it violates the current boundary PriceBoundary(35.15,39.00)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"57282324",
        "exceptionMessage":"Can't modify min price to 31.5 since it violates the current boundary PriceBoundary(32.18,35.00)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"57282861",
        "exceptionMessage":"Can't modify min price to 35.1 since it violates the current boundary PriceBoundary(35.15,39.00)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"57282118",
        "exceptionMessage":"Can't modify min price to 26.1 since it violates the current boundary PriceBoundary(27.73,29.00)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"57282152",
        "exceptionMessage":"Can't modify min price to 35.1 since it violates the current boundary PriceBoundary(35.15,39.00)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"57316468",
        "exceptionMessage":"Can't modify min price to 521.1 since it violates the current boundary PriceBoundary(529.00,579.00)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"57282300",
        "exceptionMessage":"Can't modify min price to 4769.1 since it violates the current boundary PriceBoundary(4916.84,5299.00)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"57317261",
        "exceptionMessage":"Can't modify min price to 125.10000000000001 since it violates the current boundary PriceBoundary(129.00,139.00)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"57282345",
        "exceptionMessage":"Can't modify min price to 1205.1000000000001 since it violates the current boundary PriceBoundary(1299.00,1339.00)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"57282464",
        "exceptionMessage":"Can't modify min price to 152.1 since it violates the current boundary PriceBoundary(162.84,169.00)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"57282168",
        "exceptionMessage":"Can't modify min price to 836.1 since it violates the current boundary PriceBoundary(899.00,929.00)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"57282165",
        "exceptionMessage":"Can't modify min price to 1205.1000000000001 since it violates the current boundary PriceBoundary(1299.00,1339.00)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"57282895",
        "exceptionMessage":"Can't modify min price to 1205.1000000000001 since it violates the current boundary PriceBoundary(1299.00,1339.00)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"57282307",
        "exceptionMessage":"Can't modify min price to 1205.1000000000001 since it violates the current boundary PriceBoundary(1299.00,1339.00)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"57282002",
        "exceptionMessage":"Can't modify min price to 332.1 since it violates the current boundary PriceBoundary(349.00,369.00)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"57282399",
        "exceptionMessage":"Can't modify min price to 1025.1000000000001 since it violates the current boundary PriceBoundary(1099.00,1139.00)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"57282374",
        "exceptionMessage":"Can't modify min price to 1025.1000000000001 since it violates the current boundary PriceBoundary(1099.00,1139.00)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"57282694",
        "exceptionMessage":"Can't modify min price to 836.1 since it violates the current boundary PriceBoundary(899.00,929.00)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"57282155",
        "exceptionMessage":"Can't modify min price to 836.1 since it violates the current boundary PriceBoundary(899.00,929.00)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"57282271",
        "exceptionMessage":"Can't modify min price to 836.1 since it violates the current boundary PriceBoundary(899.00,929.00)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"57282087",
        "exceptionMessage":"Can't modify min price to 1025.1000000000001 since it violates the current boundary PriceBoundary(1099.00,1139.00)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"57282489",
        "exceptionMessage":"Can't modify min price to 1025.1000000000001 since it violates the current boundary PriceBoundary(1099.00,1139.00)"
      }
    }
  ],
  "creationDate":"2023-05-09T10:05:00.230Z",
  "taskType":"backend.tasks.pricemonitor.offers.preprocessing",
  "finishDate":"2023-05-09T10:05:20.095Z",
  "userId":2156,
  "startDate":"2023-05-09T10:05:00.238Z",
  "taskId":"f8kfq5:44680e2e-2458-4a64-b8a4-edfd5fb2517f"
}

Failed task with failures for all products

Click to expand
{
  "state":"failed",
  "data":{
    "startTimestamp":"2023-05-09T04:00:02.974Z"
  },
  "result":{
    "operations":{
      "successful":0,
      "failed":93,
      "total":93
    }
  },
  "failureCode":"user.preprocessing.strategy.failure",
  "contractId":"tujamm",
  "failures":[
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"88673055",
        "exceptionMessage":"Can't modify max price to 0.0 since it violates the current boundary PriceBoundary(358.6128,1000000.00)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"68328105",
        "exceptionMessage":"Can't modify max price to 15.6975 since it violates the current boundary PriceBoundary(15.743,2701.87)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"68328438",
        "exceptionMessage":"Can't modify max price to 62.947500000000005 since it violates the current boundary PriceBoundary(68.614,2701.87)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"68328838",
        "exceptionMessage":"Can't modify max price to 9.397499999999999 since it violates the current boundary PriceBoundary(11.793600000000001,2701.87)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"67356778",
        "exceptionMessage":"Can't modify max price to 555.45 since it violates the current boundary PriceBoundary(667.3758,1049.0)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"78763642",
        "exceptionMessage":"Can't modify max price to 335.9475 since it violates the current boundary PriceBoundary(402.94800000000004,2701.87)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"67356961",
        "exceptionMessage":"Can't modify max price to 1154.9895000000001 since it violates the current boundary PriceBoundary(1340.1752000000001,2199.0)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"68329414",
        "exceptionMessage":"Can't modify max price to 12.5475 since it violates the current boundary PriceBoundary(17.654,2701.87)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"78763669",
        "exceptionMessage":"Can't modify max price to 10.4475 since it violates the current boundary PriceBoundary(15.2152,2701.87)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"68328448",
        "exceptionMessage":"Can't modify max price to 98.64750000000001 since it violates the current boundary PriceBoundary(102.284,2701.87)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"68756226",
        "exceptionMessage":"Can't modify max price to 131.19750000000002 since it violates the current boundary PriceBoundary(152.3158,2701.87)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"68328748",
        "exceptionMessage":"Can't modify max price to 4.1475 since it violates the current boundary PriceBoundary(4.2042,2701.87)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"87832326",
        "exceptionMessage":"Can't modify max price to 12.5475 since it violates the current boundary PriceBoundary(16.1252,2701.87)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"68329058",
        "exceptionMessage":"Can't modify max price to 2.0475 since it violates the current boundary PriceBoundary(2.0566,2701.87)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"68328749",
        "exceptionMessage":"Can't modify max price to 8.3475 since it violates the current boundary PriceBoundary(12.1394,2701.87)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"68329108",
        "exceptionMessage":"Can't modify max price to 46.14750000000001 since it violates the current boundary PriceBoundary(47.502,2701.87)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"67356678",
        "exceptionMessage":"Can't modify max price to 418.95000000000005 since it violates the current boundary PriceBoundary(508.5262000000001,789.99)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"79044179",
        "exceptionMessage":"Can't modify max price to 16.7475 since it violates the current boundary PriceBoundary(19.747,2701.87)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"68328597",
        "exceptionMessage":"Can't modify max price to 125.9475 since it violates the current boundary PriceBoundary(130.13,2701.87)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"78763724",
        "exceptionMessage":"Can't modify max price to 12.600000000000001 since it violates the current boundary PriceBoundary(14.7056,2701.87)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"68328344",
        "exceptionMessage":"Can't modify max price to 62.947500000000005 since it violates the current boundary PriceBoundary(63.7,2701.87)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"78762366",
        "exceptionMessage":"Can't modify max price to 1101.45 since it violates the current boundary PriceBoundary(1397.4142,1649.0)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"84641852",
        "exceptionMessage":"Can't modify max price to 31.4475 since it violates the current boundary PriceBoundary(39.13,2701.87)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"78763514",
        "exceptionMessage":"Can't modify max price to 272.9475 since it violates the current boundary PriceBoundary(292.929,2701.87)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"78762367",
        "exceptionMessage":"Can't modify max price to 99.75 since it violates the current boundary PriceBoundary(103.77640000000001,139.99)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"68327996",
        "exceptionMessage":"Can't modify max price to 68.1975 since it violates the current boundary PriceBoundary(71.8354,2701.87)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"68373053",
        "exceptionMessage":"Can't modify max price to 19.8975 since it violates the current boundary PriceBoundary(20.4932,2701.87)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"68865365",
        "exceptionMessage":"Can't modify max price to 488.25 since it violates the current boundary PriceBoundary(560.7420000000001,869.99)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"68328261",
        "exceptionMessage":"Can't modify max price to 57.697500000000005 since it violates the current boundary PriceBoundary(75.69380000000001,2701.87)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"68373051",
        "exceptionMessage":"Can't modify max price to 2.0475 since it violates the current boundary PriceBoundary(3.6946,2701.87)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"78762370",
        "exceptionMessage":"Can't modify max price to 2623.9500000000003 since it violates the current boundary PriceBoundary(3310.7984,3799.0)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"78764192",
        "exceptionMessage":"Can't modify min price to 0.0 since it violates the current boundary PriceBoundary(0.01,1000000.00)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"67356770",
        "exceptionMessage":"Can't modify max price to 523.95 since it violates the current boundary PriceBoundary(606.2420000000001,949.99)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"68566764",
        "exceptionMessage":"Can't modify max price to 3.0975 since it violates the current boundary PriceBoundary(3.5126,2701.87)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"82558573",
        "exceptionMessage":"Can't modify max price to 13.5975 since it violates the current boundary PriceBoundary(22.677200000000003,2701.87)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"71348897",
        "exceptionMessage":"Can't modify max price to 110.25 since it violates the current boundary PriceBoundary(130.40300000000002,159.99)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"67356779",
        "exceptionMessage":"Can't modify max price to 523.95 since it violates the current boundary PriceBoundary(597.324,929.99)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"78763130",
        "exceptionMessage":"Can't modify max price to 262.4475 since it violates the current boundary PriceBoundary(297.479,2701.87)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"68328608",
        "exceptionMessage":"Can't modify max price to 15.6975 since it violates the current boundary PriceBoundary(18.436600000000002,2701.87)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"67356767",
        "exceptionMessage":"Can't modify max price to 450.45000000000005 since it violates the current boundary PriceBoundary(484.66600000000005,759.99)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"68328114",
        "exceptionMessage":"Can't modify max price to 62.947500000000005 since it violates the current boundary PriceBoundary(65.52,2701.87)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"88113739",
        "exceptionMessage":"Can't modify max price to 2.0475 since it violates the current boundary PriceBoundary(26.499200000000002,2701.87)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"82891765",
        "exceptionMessage":"Can't modify max price to 104.9475 since it violates the current boundary PriceBoundary(164.10940000000002,2701.87)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"67356775",
        "exceptionMessage":"Can't modify max price to 498.75 since it violates the current boundary PriceBoundary(570.9522,889.99)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"67357075",
        "exceptionMessage":"Can't modify max price to 82.95 since it violates the current boundary PriceBoundary(100.71880000000002,119.99)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"68328424",
        "exceptionMessage":"Can't modify max price to 141.6975 since it violates the current boundary PriceBoundary(202.02,2701.87)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"67356784",
        "exceptionMessage":"Can't modify max price to 119.7 since it violates the current boundary PriceBoundary(144.01659999999998,169.99)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"78763163",
        "exceptionMessage":"Can't modify max price to 57.697500000000005 since it violates the current boundary PriceBoundary(58.80420000000001,2701.87)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"78763355",
        "exceptionMessage":"Can't modify max price to 15.6975 since it violates the current boundary PriceBoundary(16.616600000000002,2701.87)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"78762365",
        "exceptionMessage":"Can't modify max price to 681.45 since it violates the current boundary PriceBoundary(883.2278000000001,989.99)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"79044161",
        "exceptionMessage":"Can't modify max price to 9.397499999999999 since it violates the current boundary PriceBoundary(2682.6800000000003,2701.87)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"79809361",
        "exceptionMessage":"Can't modify max price to 16.7475 since it violates the current boundary PriceBoundary(21.2394,2701.87)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"67356786",
        "exceptionMessage":"Can't modify max price to 488.25 since it violates the current boundary PriceBoundary(560.7420000000001,879.99)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"68329134",
        "exceptionMessage":"Can't modify max price to 16.7475 since it violates the current boundary PriceBoundary(32.123,2701.87)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"68328205",
        "exceptionMessage":"Can't modify max price to 102.84750000000001 since it violates the current boundary PriceBoundary(119.70139999999999,2701.87)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"78763330",
        "exceptionMessage":"Can't modify max price to 5.197500000000001 since it violates the current boundary PriceBoundary(8.5722,2701.87)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"78763539",
        "exceptionMessage":"Can't modify max price to 125.9475 since it violates the current boundary PriceBoundary(133.2968,2701.87)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"78763512",
        "exceptionMessage":"Can't modify max price to 24.0975 since it violates the current boundary PriceBoundary(31.668,2701.87)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"68328857",
        "exceptionMessage":"Can't modify max price to 31.4475 since it violates the current boundary PriceBoundary(37.1826,2701.87)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"78762372",
        "exceptionMessage":"Can't modify max price to 114.45 since it violates the current boundary PriceBoundary(145.16320000000002,169.99)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"68328455",
        "exceptionMessage":"Can't modify max price to 136.4475 since it violates the current boundary PriceBoundary(192.37400000000002,2701.87)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"68647965",
        "exceptionMessage":"Can't modify max price to 26.1975 since it violates the current boundary PriceBoundary(27.937,2701.87)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"67356782",
        "exceptionMessage":"Can't modify max price to 376.95 since it violates the current boundary PriceBoundary(397.54260000000005,619.99)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"79431469",
        "exceptionMessage":"Can't modify max price to 15.6975 since it violates the current boundary PriceBoundary(31.8136,2701.87)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"78763460",
        "exceptionMessage":"Can't modify max price to 38.79750000000001 since it violates the current boundary PriceBoundary(134.64360000000002,2701.87)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"78763601",
        "exceptionMessage":"Can't modify max price to 29.3475 since it violates the current boundary PriceBoundary(29.9936,2701.87)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"67356833",
        "exceptionMessage":"Can't modify max price to 523.95 since it violates the current boundary PriceBoundary(617.9264,959.99)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"68044131",
        "exceptionMessage":"Can't modify max price to 292.95 since it violates the current boundary PriceBoundary(364.6734,419.99)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"74301166",
        "exceptionMessage":"Can't modify max price to 166.95000000000002 since it violates the current boundary PriceBoundary(221.40300000000002,9999.0)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"68329019",
        "exceptionMessage":"Can't modify max price to 6.2475000000000005 since it violates the current boundary PriceBoundary(12.776399999999999,2701.87)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"67356722",
        "exceptionMessage":"Can't modify max price to 866.25 since it violates the current boundary PriceBoundary(1092.8736000000001,1249.0)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"78764189",
        "exceptionMessage":"Can't modify max price to 52.447500000000005 since it violates the current boundary PriceBoundary(56.27440000000001,2701.87)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"78764000",
        "exceptionMessage":"Can't modify max price to 2.0475 since it violates the current boundary PriceBoundary(5.6602,2701.87)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"67356768",
        "exceptionMessage":"Can't modify max price to 488.25 since it violates the current boundary PriceBoundary(560.924,879.99)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"68329149",
        "exceptionMessage":"Can't modify max price to 20.9475 since it violates the current boundary PriceBoundary(23.0958,2701.87)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"82278909",
        "exceptionMessage":"Can't modify max price to 69.2475 since it violates the current boundary PriceBoundary(114.66000000000001,2701.87)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"68647966",
        "exceptionMessage":"Can't modify max price to 26.1975 since it violates the current boundary PriceBoundary(27.937,2701.87)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"78763897",
        "exceptionMessage":"Can't modify max price to 16.7475 since it violates the current boundary PriceBoundary(17.1444,2701.87)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"75351547",
        "exceptionMessage":"Can't modify max price to 109.2 since it violates the current boundary PriceBoundary(128.856,239.99)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"78763641",
        "exceptionMessage":"Can't modify max price to 52.447500000000005 since it violates the current boundary PriceBoundary(60.06,2701.87)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"68328459",
        "exceptionMessage":"Can't modify max price to 36.697500000000005 since it violates the current boundary PriceBoundary(45.427200000000006,2701.87)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"68328752",
        "exceptionMessage":"Can't modify max price to 20.9475 since it violates the current boundary PriceBoundary(22.8592,2701.87)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"78763678",
        "exceptionMessage":"Can't modify max price to 204.6975 since it violates the current boundary PriceBoundary(278.46000000000004,2701.87)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"74301169",
        "exceptionMessage":"Can't modify max price to 261.45 since it violates the current boundary PriceBoundary(327.63640000000004,389.99)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"68329012",
        "exceptionMessage":"Can't modify max price to 20.9475 since it violates the current boundary PriceBoundary(23.605400000000003,2701.87)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"78763855",
        "exceptionMessage":"Can't modify max price to 13.5975 since it violates the current boundary PriceBoundary(17.672200000000004,2701.87)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"81749897",
        "exceptionMessage":"Can't modify max price to 292.95 since it violates the current boundary PriceBoundary(326.5262,529.99)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"67357159",
        "exceptionMessage":"Can't modify max price to 156.45000000000002 since it violates the current boundary PriceBoundary(225.8074,229.99)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"67356769",
        "exceptionMessage":"Can't modify max price to 603.75 since it violates the current boundary PriceBoundary(692.3462000000001,1089.0)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"68329423",
        "exceptionMessage":"Can't modify max price to 10.4475 since it violates the current boundary PriceBoundary(10.92,2701.87)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"68327990",
        "exceptionMessage":"Can't modify max price to 146.9475 since it violates the current boundary PriceBoundary(148.3664,2701.87)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"67356697",
        "exceptionMessage":"Can't modify max price to 1395.45 since it violates the current boundary PriceBoundary(1826.7340000000002,1999.0)"
      }
    },
    {
      "messageId":"ProcessingFailure",
      "attributes":{
        "productId":"87832348",
        "exceptionMessage":"Can't modify max price to 10.4475 since it violates the current boundary PriceBoundary(15.834,2701.87)"
      }
    }
  ],
  "creationDate":"2023-05-09T04:00:53.558Z",
  "taskType":"backend.tasks.pricemonitor.offers.preprocessing",
  "finishDate":"2023-05-09T04:00:59.213Z",
  "userId":2156,
  "startDate":"2023-05-09T04:00:54.677Z",
  "taskId":"tujamm:49329f97-62ff-4c65-89af-062432e82095"
}

Unexpected failed task

Click to expand
{
  "state":"failed",
  "data":{
    "startTimestamp":"2023-05-09T08:00:01.217Z"
  },
  "failureCode":"pricemonitor.uncategorized.failure",
  "contractId":"97j8f7",
  "failures":[
    {
      "messageId":"backend.tasks.pricemonitor.offers.preprocessing.unknownFailure",
      "attributes":{
        "error":"backend.tasks.pricemonitor.offers.preprocessing.unknownFailure",
        "exception":"scala.MatchError",
        "exceptionMessage":"null"
      }
    }
  ],
  "creationDate":"2023-05-09T09:09:18.888Z",
  "taskType":"backend.tasks.pricemonitor.offers.preprocessing",
  "finishDate":"2023-05-09T09:09:19.010Z",
  "userId":2156,
  "startDate":"2023-05-09T09:09:18.898Z",
  "taskId":"97j8f7:9a026a7a-5195-4cc4-b6b5-ceeb8cb431fa"
}

Find tasks for contract [vendor]

The search can be narrowed down by providing the IDs of the tasks, separated by comma

SecurityBasicAuth or BearerAuth
Request
path Parameters
contractId
required
string

ID of the contract

Example: qbcxvb
query Parameters
taskIdsFilter
string

Ids of the tasks

taskTypeFilter
string

Desired task type

limit
integer <int32>
Default: 100

Maximal number of results

Example: limit=10
includeFailures
boolean
Default: true

Flag whether to include failures in the response

taskState
string

Comma separated task state filter

minCreationDate
string <date-time>

Oldest returned creation date in UTC

maxCreationDate
string <date-time>

Newest returned creation date in UTC

Responses
200

No response was specified

get/api/2/v/contracts/{contractId}/tasks
Response samples
application/json
[
  • {
    }
]

Get task

Finds a task with the specified id for the given contract.

SecurityBasicAuth or BearerAuth
Request
path Parameters
contractId
required
string

ID of the contract

Example: qbcxvb
taskId
required
string

Id of the task

Responses
200

No response was specified

404

Not found

get/api/2/v/contracts/{contractId}/tasks/{taskId}
Response samples
application/json
{
  • "contractId": "string",
  • "creationDate": "2019-08-24T14:15:22Z",
  • "data": [
    ],
  • "failures": [
    ],
  • "finishDate": "2019-08-24T14:15:22Z",
  • "parentId": "string",
  • "startDate": "2019-08-24T14:15:22Z",
  • "state": "string",
  • "taskId": "string",
  • "taskType": "string"
}

Strategies Management

Operations to view and manage the pricing strategies.

Get all strategy versions metadata for contract

Get a list of metadata of all strategy versions for a contract.

SecurityBasicAuth or BearerAuth
Request
path Parameters
contractId
required
string

ID of the contract

Example: qbcxvb
Responses
200

List of metadata of all strategy versions

get/api/v3/vendor/contracts/{contractId}/settings/pricingstrategies/history
Response samples
application/json
{
  • "data": {
    }
}

Domains

Operations to view all supported domains.

A domain is an external datasource or website that contains information about offers for products for sale. Information like product characteristics and sales characterics like price, stock level and delivery times and costs.

Get a list of all available domains (V3)

This endpoint provides all domains which are supported by our system. Along with other attributes we are providing the corresponding possible offer sources. Only domains which include the offer source DEFAULT_MONITORING are supported out-of-the-box by our monitoring pipeline.

SecurityBasicAuth or BearerAuth
Responses
200

A list of domains

get/api/v3/domains
Response samples
application/json
{
  • "data": {
    }
}

Plugin Registration

Operations to view registered plugins.

Get plugin registration for contract

Return the plugin registration for the given contract.

SecurityBasicAuth or BearerAuth
Request
path Parameters
contractId
required
string

ID of the contract

Example: qbcxvb
Responses
200

Returns a plugin registration for given contract.

404

Given plugin registration does not exist.

get/api/v3/vendor/contracts/{contractId}/plugin
Response samples
application/json
{
  • "data": {
    }
}

Create/update plugin registration for contract

Create and/or update the plugin registration for given contract.

SecurityBasicAuth or BearerAuth
Request
path Parameters
contractId
required
string

ID of the contract

Example: qbcxvb
Request Body schema: application/json
required
pluginId
string
shopSystem
string
metricsUrl
string
version
string
Value: "1"
Responses
200

Plugin registration for given contract stored successfully.

put/api/v3/vendor/contracts/{contractId}/plugin
Request samples
application/json
{
  • "pluginId": "string",
  • "shopSystem": "string",
  • "metricsUrl": "string",
  • "version": "1"
}
Response samples
application/json
{
  • "data": { }
}

Delete plugin registration for contract

Delete the plugin registration for the given contract.

SecurityBasicAuth or BearerAuth
Request
path Parameters
contractId
required
string

ID of the contract

Example: qbcxvb
Responses
200

Plugin registration for given contract deleted successfully.

delete/api/v3/vendor/contracts/{contractId}/plugin
Response samples
application/json
{
  • "data": { }
}