basePath: / components: responses: TooManyRequests: content: application/json: example: error: code: 429 message: 'Request limitation: 500 reached on /v3.0/orders' description: The middleware rate-limit bucket is exhausted headers: Retry-After: description: Seconds until the current fixed window expires schema: minimum: 0 type: integer schemas: AvailableFilters: properties: error_types: description: List of types that can be used to filter errors. Only types with at least one error are returned. type: array severity_levels: description: "List of types that can be\n used to filter errors. Only types with at least one error are returned." type: array required: - error_types - severity_levels type: object DatabaseStatus: properties: host: description: Database server host type: string name: description: Database name type: string required: - host - name type: object DeleteProductResponse: description: Response model for single product deletion. properties: product_id_value: description: The ID of the deleted product title: Product Id Value type: string status: description: The deletion status title: Status type: string required: - product_id_value - status title: DeleteProductResponse type: object DeleteProductsResponse: description: Response model for deleting multiple products. items: $ref: '#/components/schemas/DeleteProductsResponseItem' title: DeleteProductsResponse type: array DeleteProductsResponseItem: description: Response item for a single product deletion. properties: product_id_value: title: Product Id Value type: string status: title: Status type: string required: - product_id_value - status title: DeleteProductsResponseItem type: object DigestReportOffersEntry: properties: delta_product_healthy_rate: description: Rate delta for healthy products since previous synchronization. format: decimal nullable: true pattern: ^-?\d{0,8}(?:\.\d{0,2})?$ type: string delta_products_in_error_rate: description: Rate delta for products in error since previous synchronization. format: decimal nullable: true pattern: ^-?\d{0,8}(?:\.\d{0,2})?$ type: string delta_products_in_feed_rate: description: Rate of change for products in feed since previous synchronization. format: decimal nullable: true pattern: ^-?\d{0,8}(?:\.\d{0,2})?$ type: string delta_products_with_warning_rate: description: Rate delta for products with warning since previous synchronization. format: decimal nullable: true pattern: ^-?\d{0,8}(?:\.\d{0,2})?$ type: string last_report_date: description: Last received report date for this report type. nullable: true type: string products_healthy: description: Number of healthy products. nullable: true type: integer products_healthy_rate: description: Rate of healthy products. format: decimal nullable: true pattern: ^-?\d{0,8}(?:\.\d{0,2})?$ type: string products_in_error: description: Number of products in error. nullable: true type: integer products_in_feed: description: Total number of products in the feed. nullable: true type: integer products_with_warning: description: Number of products with warning. nullable: true type: integer timestamp: description: 'Report timestamp. Example: "2019-12-24 21:03:00"' nullable: true type: string required: - delta_product_healthy_rate - delta_products_in_error_rate - delta_products_in_feed_rate - delta_products_with_warning_rate - products_healthy - products_healthy_rate - products_in_error - products_in_feed - products_with_warning - timestamp type: object DigestReportProductsEntry: properties: delta_product_healthy_rate: description: Rate delta for healthy products since previous synchronization. format: decimal nullable: true pattern: ^-?\d{0,8}(?:\.\d{0,2})?$ type: string delta_products_in_error_rate: description: Rate delta for products in error since previous synchronization. format: decimal nullable: true pattern: ^-?\d{0,8}(?:\.\d{0,2})?$ type: string delta_products_in_feed_rate: description: Rate of change for products in feed since previous synchronization. format: decimal nullable: true pattern: ^-?\d{0,8}(?:\.\d{0,2})?$ type: string delta_products_with_warning_rate: description: Rate delta for products with warning since previous synchronization. format: decimal nullable: true pattern: ^-?\d{0,8}(?:\.\d{0,2})?$ type: string last_report_date: description: Last received report date for this report type. nullable: true type: string products_healthy: description: Number of healthy products. nullable: true type: integer products_healthy_rate: description: Rate of healthy products. format: decimal nullable: true pattern: ^-?\d{0,8}(?:\.\d{0,2})?$ type: string products_in_error: description: Number of products in error. nullable: true type: integer products_in_feed: description: Total number of products in the feed. nullable: true type: integer products_with_warning: description: Number of products with warning. nullable: true type: integer timestamp: description: 'Report timestamp. Example: "2019-12-24 21:03:00"' nullable: true type: string required: - delta_product_healthy_rate - delta_products_in_error_rate - delta_products_in_feed_rate - delta_products_with_warning_rate - products_healthy - products_healthy_rate - products_in_error - products_in_feed - products_with_warning - timestamp type: object DigestResponse: properties: available_filters: $ref: '#/components/schemas/AvailableFilters' last_report_date: type: string measures: $ref: '#/components/schemas/Measures' required: - available_filters - last_report_date - measures type: object DigestV2Reports: properties: offers: $ref: '#/components/schemas/DigestReportOffersEntry' products: $ref: '#/components/schemas/DigestReportProductsEntry' required: - offers - products type: object DigestV2Response: properties: reports: $ref: '#/components/schemas/DigestV2Reports' required: - reports type: object DuplicateRulesRequest: examples: - rule_ids: - 1 - 2 - 3 target_catalogue_ids: - 200 - 201 user_id: 42 properties: rule_ids: items: type: integer title: Rule Ids type: array uniqueItems: true target_catalogue_ids: items: type: integer title: Target Catalogue Ids type: array uniqueItems: true user_id: title: User Id type: integer required: - user_id - target_catalogue_ids - rule_ids title: DuplicateRulesRequest type: object Error: properties: attribute: $ref: '#/components/schemas/ErrorAttribute' code: type: string error_id: type: integer header_slug: type: string impacted_line_id: type: integer indicator: $ref: '#/components/schemas/ErrorIndicator' message: type: string severity: nullable: true type: string required: - attribute - code - error_id - header_slug - impacted_line_id - indicator - message type: object ErrorAttribute: properties: name: type: string required: - name type: object ErrorIndicator: properties: count: type: integer type: type: string required: - count - type type: object ErrorsResponseSeralizer: properties: errors: items: $ref: '#/components/schemas/Error' type: array total_error_count: type: integer required: - errors - total_error_count type: object GetCatalogueResponse: properties: additional_sources: anyOf: - items: type: integer type: array - type: 'null' title: Additional Sources catalogue_id: title: Catalogue Id type: integer created_at: title: Created At type: string indexed_at: anyOf: - type: string - type: 'null' title: Indexed At name: title: Name type: string product_id_key: title: Product Id Key type: string products_count: title: Products Count type: integer source: title: Source type: string status: title: Status type: string updated_at: title: Updated At type: string required: - catalogue_id - name - status - product_id_key - created_at - updated_at - indexed_at - source - products_count title: GetCatalogueResponse type: object GetProductResponse: additionalProperties: true title: GetProductResponse type: object GroupsResponse: properties: error: $ref: '#/components/schemas/SeverityResponse' slug: description: Identifier of the group type: string warning: $ref: '#/components/schemas/SeverityResponse' required: - error - slug - warning type: object HTTPValidationError: properties: detail: items: $ref: '#/components/schemas/ValidationError' title: Detail type: array title: HTTPValidationError type: object LineErrorCount: properties: count: description: Number of lines in error. type: integer required: - count type: object LineWarningCount: properties: count: description: Number of lines with warning. type: integer required: - count type: object ListAttributesResponse: $ref: '#/components/schemas/PaginatedResultWithNext_str_' title: ListAttributesResponse ListCataloguesResponse: $ref: '#/components/schemas/PaginatedResultWithNext_ListCataloguesResponseItem_-Output' title: ListCataloguesResponse ListCataloguesResponseItem-Input: properties: additional_sources: anyOf: - items: type: integer type: array - type: 'null' title: Additional Sources catalogue_id: title: Catalogue Id type: integer channels_count: title: Channels Count type: integer name: title: Name type: string product_id_key: title: Product Id Key type: string role: title: Role type: string status: title: Status type: string used_by: anyOf: - items: type: integer type: array - type: 'null' title: Used By required: - catalogue_id - name - status - product_id_key - role - additional_sources - used_by - channels_count title: ListCataloguesResponseItem type: object ListCataloguesResponseItem-Output: properties: additional_sources: anyOf: - items: type: integer type: array - type: 'null' title: Additional Sources catalogue_id: title: Catalogue Id type: integer channels_count: title: Channels Count type: integer name: title: Name type: string product_id_key: title: Product Id Key type: string role: title: Role type: string status: title: Status type: string used_by: anyOf: - items: type: integer type: array - type: 'null' title: Used By required: - catalogue_id - name - status - product_id_key - role - channels_count title: ListCataloguesResponseItem type: object ListProductsResponse: $ref: '#/components/schemas/PaginatedResultWithNext_ListProductsResponseItem_' title: ListProductsResponse ListProductsResponseItem: properties: attributes: additionalProperties: true title: Attributes type: object product_id_value: title: Product Id Value type: string required: - product_id_value - attributes title: ListProductsResponseItem type: object Measures: properties: instances_in_error: $ref: '#/components/schemas/LineErrorCount' instances_with_warning: $ref: '#/components/schemas/LineWarningCount' products_in_error: $ref: '#/components/schemas/ProductsErrorCount' products_in_feed: $ref: '#/components/schemas/ProductsSent' products_published: allOf: - $ref: '#/components/schemas/ProductsPublished' description: Number of products actually published. products_with_warning: $ref: '#/components/schemas/ProductsErrorCount' required: - instances_in_error - instances_with_warning - products_in_error - products_in_feed - products_published - products_with_warning type: object PaginatedResultWithNext_ListCataloguesResponseItem_-Input: properties: data: items: $ref: '#/components/schemas/ListCataloguesResponseItem-Input' title: Data type: array limit: title: Limit type: integer next: anyOf: - type: string - type: 'null' title: Next page: title: Page type: integer total: title: Total type: integer required: - data - total - page - limit - next title: PaginatedResultWithNext[ListCataloguesResponseItem] type: object PaginatedResultWithNext_ListCataloguesResponseItem_-Output: properties: data: items: $ref: '#/components/schemas/ListCataloguesResponseItem-Output' title: Data type: array limit: title: Limit type: integer next: anyOf: - type: string - type: 'null' title: Next page: title: Page type: integer total: title: Total type: integer required: - data - total - page - limit - next title: PaginatedResultWithNext[ListCataloguesResponseItem] type: object PaginatedResultWithNext_ListProductsResponseItem_: properties: data: items: $ref: '#/components/schemas/ListProductsResponseItem' title: Data type: array limit: title: Limit type: integer next: anyOf: - type: string - type: 'null' title: Next page: title: Page type: integer total: title: Total type: integer required: - data - total - page - limit - next title: PaginatedResultWithNext[ListProductsResponseItem] type: object PaginatedResultWithNext_str_: properties: data: items: type: string title: Data type: array limit: title: Limit type: integer next: anyOf: - type: string - type: 'null' title: Next page: title: Page type: integer total: title: Total type: integer required: - data - total - page - limit - next title: PaginatedResultWithNext[str] type: object Product: properties: additional_data: description: Additional data attached on product. type: object errors: description: Errors for the product. type: object feed_id: description: Feed id attached for product. type: integer level: type: integer message: description: Message attached for product. type: string product_id: description: ID of the product. type: string task_id: description: Task ID for the product. type: string updated_at: type: string required: - additional_data - errors - feed_id - level - message - product_id - task_id - updated_at type: object ProductsErrorCount: properties: count: description: Number of products in error. type: integer required: - count type: object ProductsPublished: properties: count: description: Number of products actually published. type: integer percentage: description: Percentage of products actually published. type: integer required: - count - percentage type: object ProductsResponse: properties: count: description: Number of products in status online. type: integer limit: description: Number of products to return. type: integer products: items: $ref: '#/components/schemas/Product' type: array required: - count - limit - products type: object ProductsSent: properties: count: description: Number of products sent to the channel. type: integer percentage: description: Percentage of products sent to the channel. type: integer required: - count - percentage type: object ReportLinesResponse: properties: error_header_slug: description: The slug of the high-level description of the error. type: string group_slug: description: Identifier of the group. type: string header: description: The list of the column names to be displayed. Attribute names are prefixed with `$`. type: string nb_products_impacted: description: Number of distinct products impacted by the returned report lines. nullable: true type: integer total_report_line_count: description: Total number of report lines. type: integer values: description: A list of arrays containing values. Each array has the same number of elements as `header` type: array required: - error_header_slug - group_slug - header - total_report_line_count - values type: object RuleDuplicationAttributeResponse: properties: key: description: The identifier of the attribute in the system examples: - price - SRC_123456:quantity title: Key type: string name: description: The name of the attribute examples: - price - quantity title: Name type: string source: description: The ID of the source this attribute is attached to title: Source type: integer required: - name - key - source title: RuleDuplicationAttributeResponse type: object RuleDuplicationErrorResponse: properties: attribute: anyOf: - $ref: '#/components/schemas/RuleDuplicationAttributeResponse' - type: 'null' description: The attribute related to the error, if applicable attributes: anyOf: - items: $ref: '#/components/schemas/RuleDuplicationAttributeResponse' type: array - type: 'null' description: The list of attributes related to the error, if applicable title: Attributes error_code: description: The error code identifying the type of duplication error enum: - rule_duplication.self_duplication - rule_duplication.source_rule.not_found - rule_duplication.validity_period - rule_duplication.referenced_attributes.not_found - rule_duplication.target_attribute.duplicate_new_on_not_new - rule_duplication.target_attribute.duplicate_not_new_on_new - rule_duplication.target_attribute.not_found - rule_duplication.target_attribute.default_rule.already_exists - rule_duplication.target_attribute.default_rule.already_duplicated - rule_duplication.unknown_error - catalogue.not_found title: Error Code type: string message: description: A human-readable message describing the error title: Message type: string required: - error_code - message title: RuleDuplicationErrorResponse type: object RuleDuplicationOperationEntryResponse: properties: errors: anyOf: - items: $ref: '#/components/schemas/RuleDuplicationErrorResponse' type: array - type: 'null' title: Errors new_rule_id: anyOf: - type: integer - type: 'null' title: New Rule Id source_catalogue_id: title: Source Catalogue Id type: integer source_rule_id: title: Source Rule Id type: integer success: title: Success type: boolean target_catalogue_id: title: Target Catalogue Id type: integer warnings: anyOf: - items: $ref: '#/components/schemas/RuleDuplicationErrorResponse' type: array - type: 'null' title: Warnings required: - source_rule_id - source_catalogue_id - target_catalogue_id - success title: RuleDuplicationOperationEntryResponse type: object RuleDuplicationOperationResponse: examples: - created_at: '2026-05-19T09:17:20.989272+00:00' failure_count: 1 operation_id: 019e3f81-3f25-716f-8ee3-b7f651ede48e results: - new_rule_id: 74 source_catalogue_id: 1 source_rule_id: 19 success: true target_catalogue_id: 4 - errors: - error_code: rule_duplication.unknown_error message: 'Failed to duplicate rule 1: Missing required attribute ''quantity''.' source_catalogue_id: 1 source_rule_id: 1 success: false target_catalogue_id: 4 - new_rule_id: 72 source_catalogue_id: 1 source_rule_id: 2 success: true target_catalogue_id: 4 warnings: - message: The rule has a validity period that will not be duplicated. warning_code: rule_duplication.validity_period - new_rule_id: 73 source_catalogue_id: 1 source_rule_id: 3 success: true target_catalogue_id: 4 success_count: 3 total_rules: 4 user_id: 123 properties: created_at: anyOf: - format: date-time type: string - type: 'null' title: Created At failure_count: title: Failure Count type: integer operation_id: title: Operation Id type: string results: items: $ref: '#/components/schemas/RuleDuplicationOperationEntryResponse' title: Results type: array success_count: title: Success Count type: integer total_rules: title: Total Rules type: integer user_id: anyOf: - type: integer - type: 'null' title: User Id required: - operation_id - total_rules - success_count - failure_count - results title: RuleDuplicationOperationResponse type: object SeverityResponse: properties: nb_instances: description: Number of this severity events type: integer nb_products_impacted: description: Number of products related to this severity event type: integer required: - nb_instances - nb_products_impacted type: object ShardStatus: properties: key: description: Shard key type: integer ready: description: False if the data is being migrated across servers type: boolean required: - key - ready type: object StatusResponse: properties: database: $ref: '#/components/schemas/DatabaseStatus' shard: $ref: '#/components/schemas/ShardStatus' status: default: 200 description: HTTP Status type: integer required: - database - shard type: object UpdateProductRequest: additionalProperties: anyOf: - type: integer - type: number - type: string - type: boolean - type: 'null' title: UpdateProductRequest type: object UpdateProductResponse: title: UpdateProductResponse UpdateProductsRequest: additionalProperties: $ref: '#/components/schemas/UpdateProductsRequestItem' title: UpdateProductsRequest type: object UpdateProductsRequestItem: additionalProperties: anyOf: - type: integer - type: number - type: string - type: boolean - type: 'null' title: UpdateProductsRequestItem type: object UpdateProductsResponse: additionalProperties: $ref: '#/components/schemas/UpdateProductsResponseItem' title: UpdateProductsResponse type: object UpdateProductsResponseItem: properties: errors: anyOf: - items: type: string type: array - type: 'null' title: Errors status: title: Status type: string required: - status title: UpdateProductsResponseItem type: object UpsertProductsRequest: items: additionalProperties: anyOf: - type: integer - type: number - type: string - type: boolean - type: 'null' type: object title: UpsertProductsRequest type: array UpsertProductsResponse: items: $ref: '#/components/schemas/UpsertProductsResponseItem' title: UpsertProductsResponse type: array UpsertProductsResponseItem: properties: errors: anyOf: - items: type: string type: array - type: 'null' title: Errors product_id_value: anyOf: - type: string - type: 'null' title: Product Id Value status: title: Status type: string required: - product_id_value - status - errors title: UpsertProductsResponseItem type: object ValidationError: properties: loc: items: anyOf: - type: string - type: integer title: Location type: array msg: title: Message type: string type: title: Error Type type: string required: - loc - msg - type title: ValidationError type: object securitySchemes: bearerAuth: scheme: bearer type: http consumes: ' application/json' host: api.lengow.io info: contact: email: support@lengow.com name: Support url: http://help.lengow.com description: '# Getting started Welcome to Lengow API documentation for Channel Execution solutions, including NetAmplify for Ads Feed Management and NetMarkets for Marketplace Management. Lengow API is a REST-based API that allows you to: * List and retrieve the orders of your account * Execute actions on orders: acceptance, shipment, cancellation, and refund * Display the complete list of possible order actions authorized by each marketplace, at which status and with which mandatory or optional parameters * Retrieve invoice documents * Communicate with Zalando warehouse ## Technical Aspects * The API respects the `REST` fundamentals. * The base URL for the latest version is `api.lengow.io/v3.0` over `HTTPS`. * All data is sent and received as `JSON` by default. **Production URL:** https://api.lengow.io ### Specific types | types | Description | |------------|----------------------------------------| | Country | Depending on resources, countries are specified as two ([ISO 3166-2](https://en.wikipedia.org/wiki/ISO_3166-2)) or three characters [ISO 3166-1 alpha-3](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-3) | | Date | All date/time values are specified in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) ex: `2020-03-16T04:46:00+00:00`| | Currency | All currencies are specified as three characters ([ISO 4217](https://en.wikipedia.org/wiki/ISO_4217)) | | Money | decimal or string | # Manage orders | Method | Endpoint | Description | |------------------|--------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | GET, POST, PATCH | https://api.lengow.io/v3.0/orders/ | This endpoint allows you to retrieve and list your account orders (including the details of the order), mark the order with your internal order ID, perform actions on orders and check if they succeed. Each endpoint is detailed below. | ## List of order statuses From a Marketplace point of view, they all have their order statuses. In Lengow, we regroup and standardize all these statuses in the `lengow_status`. If you wish to filter based on the order status when retrieving orders, we advise you to rely on the `lengow_status` parameter. | Status | Allowed action | Description | |--------------------|----------------------|----------------------------------------------------------------------------------------------------------------------------------------| | new | None | Order was created but no action is available for now. | | waiting_acceptance | accept, refuse | The merchant has to accept or refuse the order. Automatic acceptance tool available on your Lengow account. | | refused | None | The order was refused by the merchant. | | accepted | None | The order has been accepted by the merchant and waiting for the marketplace authorization for shipping. | | waiting_shipment | ship, cancel, refund | Depending on the marketplace the merchant can ship, cancel or refund the order. | | shipped | refund | The order is waiting for the final marketplace validation for closing. Depending on the marketplace the merchant can refund the order. | | closed | None | The order is closed, no more actions are available. | | canceled | refund | The order was canceled. Depending on the marketplace, the order can be refunded. | | refunding | None | The refund demand is waiting for the marketplace validation. | | refunded | None | Like `closed` status, the order is closed and no more action are available. | | partial_refunded | None | Similar to `refunded`, but not all the lines have refunded status. | | pickup_to_prepare | None | The merchant has to prepare the pickup. Specific to eBay | | to_pickup | None | The order is ready for pickup. Specific to eBay | | pickup_completed | None | The order has been picked up by the buyer. Specific to eBay | | pickup_canceled | None | The pickup has been cancelled. Specific to eBay | | to_refund | refund | The merchant has to refund the order. | ## Orders Workflow The Order retrieval and update process usually flows like this with Lengow REST API: 1. Order is placed on a marketplace 2. Order is retrieved from the marketplace by Lengow every 15 minutes 3. Merchants will retrieve orders that haven''t already been imported into their system. Refer to [get order endpoint](#tag/Orders/operation/Get%20Orders%20List) and the main filter to retrieve the order. 4. Once those orders have been imported into their system successfully, the merchant can mark them by setting the merchant order ID. Refer to [set merchant order ID endpoint](#tag/Orders/operation/Set%20Order%20Merchant%20ID). 5. Then Orders may be updated with 5 actions: Accept, Refuse, Ship, Cancel and Refund. Refers to [create an action on an order endpoint](#tag/Orders/operation/Order%20action). Acceptation may be automated by activating automatic order acceptance on your Lengow [account](https://my.lengow.io/company/orders/acceptation). To know which action is available by marketplace and which parameters are required for each action, refer to [get marketplace information endpoint](#tag/Marketplaces/operation/Get%20information%20on%20marketplaces). 7. Merchant can list all the actions on the orders and verify if they have been processed by the marketplace. Refer to [List all actions on orders endpoint](#tag/Orders/operation/Order%20action) The diagram below provides a simplified representation of the Lengow order workflow. It does not consider the specificities of each marketplace. It would be best to analyse the statuses and possible actions for each of your marketplaces individually. [get marketplace information endpoint](#tag/Marketplaces/operation/Get%20information%20on%20marketplaces) ![ORDER_WORKFLOW](/static/ORDER_WORKFLOW.png)' license: name: Proprietary url: http://my.lengow.io termsOfService: http://swagger.io/terms/ title: Lengow API - Channel Execution version: '1.0' x-logo: altText: Lengow API backgroundColor: '#FFFFFF' url: /static/lengow_brand.png openapi: 3.0.3 paths: /access/get_token: post: description: "`/access/get_token`\n\nThis endpoint returns the session token, that you will have to provide in an `Authorization`\ \ HTTP header to authenticate each of your requests on Lengow API \n\n To get your token you will need 2 API keys:\ \ secret and access_token. You can find them on the API section of your Lengow account.\n\nYou can generate a new\ \ secret and access_token on the API section of your Lengow account. The previously generated tokens will be automatically\ \ revoked.\n\nAPI keys are unique to your account. If you are using a subaccount you will have different API keys\ \ per subaccount.\n\nThe session token returned by `access/get_token` is valid **for one hour**. It is unnecessary\ \ to request a token before each request.\n\nTo check the remaining validity time of a token, you can use the `/me`\ \ API." operationId: Get Authentication Token parameters: - in: body name: access_token required: true type: string - in: body name: secret required: true type: string produces: - application/json responses: '200': content: application/json: example: account_id: 1 token: c682877f-5933-4928-914a-69bac1d750ed schema: '$ref: #/definitions/Token' description: A new session token '400': content: application/json: example: error: code: 400 message: Authentication error - Secret is not accepted description: An authentication error tags: - Authentication /me: get: description: '`/me` This endpoint returns the current session description. It shows the expiration date of the current session token.' operationId: Get Current Session produces: - application/json responses: '200': content: application/json: example: account_id: 1 expire_at: '2023-10-23T13:45:23Z' schema: '$ref: #/definitions/Token' description: Current session details '403': content: application/json: example: error: code: 403 message: 'Token: c682877f-5933-4928-914a-69bac1d750ed is expired' schema: '$ref: #/definitions/Token' description: Invalid or Expired session tags: - Authentication /rate-limits: get: description: '`/rate-limits` This authenticated endpoint returns every API route available to the current login and its configured fixed-window quota. `remaining_credit` is the current Redis bucket value, clamped to zero after exhaustion. `remaining_time` is expressed in seconds. Both remaining fields are `null` when rate limiting is disabled for a route.' operationId: Get Rate Limits produces: - application/json responses: '200': content: application/json: example: - boundary: 500 method: GET remaining_credit: 499 remaining_time: 42 url_base: /orders schema: items: properties: boundary: nullable: true type: integer method: type: string remaining_credit: nullable: true type: integer remaining_time: maximum: 60 minimum: 0 nullable: true type: integer url_base: type: string required: - url_base - method - boundary - remaining_credit - remaining_time type: object type: array description: Available routes and current rate-limit state '401': content: application/json: example: error: code: 401 message: Invalid or expired authentication token description: Missing, invalid, or expired authentication token '500': content: application/json: example: error: code: 500 message: Can't retrieve rate limits description: Rate-limit state could not be retrieved tags: - Rate limits /v1.0/catalogues: get: DeleteProductResponse: description: Response model for single product deletion. properties: product_id_value: description: The ID of the deleted product title: Product Id Value type: string status: description: The deletion status title: Status type: string required: - product_id_value - status title: DeleteProductResponse type: object DeleteProductsResponse: description: Response model for deleting multiple products. items: $ref: '#/components/schemas/DeleteProductsResponseItem' title: DeleteProductsResponse type: array DeleteProductsResponseItem: description: Response item for a single product deletion. properties: product_id_value: title: Product Id Value type: string status: title: Status type: string required: - product_id_value - status title: DeleteProductsResponseItem type: object DuplicateRulesRequest: examples: - rule_ids: - 1 - 2 - 3 target_catalogue_ids: - 200 - 201 user_id: 42 properties: rule_ids: items: type: integer title: Rule Ids type: array uniqueItems: true target_catalogue_ids: items: type: integer title: Target Catalogue Ids type: array uniqueItems: true user_id: title: User Id type: integer required: - user_id - target_catalogue_ids - rule_ids title: DuplicateRulesRequest type: object GetCatalogueResponse: properties: additional_sources: anyOf: - items: type: integer type: array - type: 'null' title: Additional Sources catalogue_id: title: Catalogue Id type: integer created_at: title: Created At type: string indexed_at: anyOf: - type: string - type: 'null' title: Indexed At name: title: Name type: string product_id_key: title: Product Id Key type: string products_count: title: Products Count type: integer source: title: Source type: string status: title: Status type: string updated_at: title: Updated At type: string required: - catalogue_id - name - status - product_id_key - created_at - updated_at - indexed_at - source - products_count title: GetCatalogueResponse type: object GetProductResponse: additionalProperties: true title: GetProductResponse type: object HTTPValidationError: properties: detail: items: $ref: '#/components/schemas/ValidationError' title: Detail type: array title: HTTPValidationError type: object ListAttributesResponse: $ref: '#/components/schemas/PaginatedResultWithNext_str_' title: ListAttributesResponse ListCataloguesResponse: $ref: '#/components/schemas/PaginatedResultWithNext_ListCataloguesResponseItem_-Output' title: ListCataloguesResponse ListCataloguesResponseItem-Input: properties: additional_sources: anyOf: - items: type: integer type: array - type: 'null' title: Additional Sources catalogue_id: title: Catalogue Id type: integer channels_count: title: Channels Count type: integer name: title: Name type: string product_id_key: title: Product Id Key type: string role: title: Role type: string status: title: Status type: string used_by: anyOf: - items: type: integer type: array - type: 'null' title: Used By required: - catalogue_id - name - status - product_id_key - role - additional_sources - used_by - channels_count title: ListCataloguesResponseItem type: object ListCataloguesResponseItem-Output: properties: additional_sources: anyOf: - items: type: integer type: array - type: 'null' title: Additional Sources catalogue_id: title: Catalogue Id type: integer channels_count: title: Channels Count type: integer name: title: Name type: string product_id_key: title: Product Id Key type: string role: title: Role type: string status: title: Status type: string used_by: anyOf: - items: type: integer type: array - type: 'null' title: Used By required: - catalogue_id - name - status - product_id_key - role - channels_count title: ListCataloguesResponseItem type: object ListProductsResponse: $ref: '#/components/schemas/PaginatedResultWithNext_ListProductsResponseItem_' title: ListProductsResponse ListProductsResponseItem: properties: attributes: additionalProperties: true title: Attributes type: object product_id_value: title: Product Id Value type: string required: - product_id_value - attributes title: ListProductsResponseItem type: object PaginatedResultWithNext_ListCataloguesResponseItem_-Input: properties: data: items: $ref: '#/components/schemas/ListCataloguesResponseItem-Input' title: Data type: array limit: title: Limit type: integer next: anyOf: - type: string - type: 'null' title: Next page: title: Page type: integer total: title: Total type: integer required: - data - total - page - limit - next title: PaginatedResultWithNext[ListCataloguesResponseItem] type: object PaginatedResultWithNext_ListCataloguesResponseItem_-Output: properties: data: items: $ref: '#/components/schemas/ListCataloguesResponseItem-Output' title: Data type: array limit: title: Limit type: integer next: anyOf: - type: string - type: 'null' title: Next page: title: Page type: integer total: title: Total type: integer required: - data - total - page - limit - next title: PaginatedResultWithNext[ListCataloguesResponseItem] type: object PaginatedResultWithNext_ListProductsResponseItem_: properties: data: items: $ref: '#/components/schemas/ListProductsResponseItem' title: Data type: array limit: title: Limit type: integer next: anyOf: - type: string - type: 'null' title: Next page: title: Page type: integer total: title: Total type: integer required: - data - total - page - limit - next title: PaginatedResultWithNext[ListProductsResponseItem] type: object PaginatedResultWithNext_str_: properties: data: items: type: string title: Data type: array limit: title: Limit type: integer next: anyOf: - type: string - type: 'null' title: Next page: title: Page type: integer total: title: Total type: integer required: - data - total - page - limit - next title: PaginatedResultWithNext[str] type: object RuleDuplicationAttributeResponse: properties: key: description: The identifier of the attribute in the system examples: - price - SRC_123456:quantity title: Key type: string name: description: The name of the attribute examples: - price - quantity title: Name type: string source: description: The ID of the source this attribute is attached to title: Source type: integer required: - name - key - source title: RuleDuplicationAttributeResponse type: object RuleDuplicationErrorResponse: properties: attribute: anyOf: - $ref: '#/components/schemas/RuleDuplicationAttributeResponse' - type: 'null' description: The attribute related to the error, if applicable attributes: anyOf: - items: $ref: '#/components/schemas/RuleDuplicationAttributeResponse' type: array - type: 'null' description: The list of attributes related to the error, if applicable title: Attributes error_code: description: The error code identifying the type of duplication error enum: - rule_duplication.self_duplication - rule_duplication.source_rule.not_found - rule_duplication.validity_period - rule_duplication.referenced_attributes.not_found - rule_duplication.target_attribute.duplicate_new_on_not_new - rule_duplication.target_attribute.duplicate_not_new_on_new - rule_duplication.target_attribute.not_found - rule_duplication.target_attribute.default_rule.already_exists - rule_duplication.target_attribute.default_rule.already_duplicated - rule_duplication.unknown_error - catalogue.not_found title: Error Code type: string message: description: A human-readable message describing the error title: Message type: string required: - error_code - message title: RuleDuplicationErrorResponse type: object RuleDuplicationOperationEntryResponse: properties: errors: anyOf: - items: $ref: '#/components/schemas/RuleDuplicationErrorResponse' type: array - type: 'null' title: Errors new_rule_id: anyOf: - type: integer - type: 'null' title: New Rule Id source_catalogue_id: title: Source Catalogue Id type: integer source_rule_id: title: Source Rule Id type: integer success: title: Success type: boolean target_catalogue_id: title: Target Catalogue Id type: integer warnings: anyOf: - items: $ref: '#/components/schemas/RuleDuplicationErrorResponse' type: array - type: 'null' title: Warnings required: - source_rule_id - source_catalogue_id - target_catalogue_id - success title: RuleDuplicationOperationEntryResponse type: object RuleDuplicationOperationResponse: examples: - created_at: '2026-05-19T09:17:20.989272+00:00' failure_count: 1 operation_id: 019e3f81-3f25-716f-8ee3-b7f651ede48e results: - new_rule_id: 74 source_catalogue_id: 1 source_rule_id: 19 success: true target_catalogue_id: 4 - errors: - error_code: rule_duplication.unknown_error message: 'Failed to duplicate rule 1: Missing required attribute ''quantity''.' source_catalogue_id: 1 source_rule_id: 1 success: false target_catalogue_id: 4 - new_rule_id: 72 source_catalogue_id: 1 source_rule_id: 2 success: true target_catalogue_id: 4 warnings: - message: The rule has a validity period that will not be duplicated. warning_code: rule_duplication.validity_period - new_rule_id: 73 source_catalogue_id: 1 source_rule_id: 3 success: true target_catalogue_id: 4 success_count: 3 total_rules: 4 user_id: 123 properties: created_at: anyOf: - format: date-time type: string - type: 'null' title: Created At failure_count: title: Failure Count type: integer operation_id: title: Operation Id type: string results: items: $ref: '#/components/schemas/RuleDuplicationOperationEntryResponse' title: Results type: array success_count: title: Success Count type: integer total_rules: title: Total Rules type: integer user_id: anyOf: - type: integer - type: 'null' title: User Id required: - operation_id - total_rules - success_count - failure_count - results title: RuleDuplicationOperationResponse type: object UpdateProductRequest: additionalProperties: anyOf: - type: integer - type: number - type: string - type: boolean - type: 'null' title: UpdateProductRequest type: object UpdateProductResponse: title: UpdateProductResponse UpdateProductsRequest: additionalProperties: $ref: '#/components/schemas/UpdateProductsRequestItem' title: UpdateProductsRequest type: object UpdateProductsRequestItem: additionalProperties: anyOf: - type: integer - type: number - type: string - type: boolean - type: 'null' title: UpdateProductsRequestItem type: object UpdateProductsResponse: additionalProperties: $ref: '#/components/schemas/UpdateProductsResponseItem' title: UpdateProductsResponse type: object UpdateProductsResponseItem: properties: errors: anyOf: - items: type: string type: array - type: 'null' title: Errors status: title: Status type: string required: - status title: UpdateProductsResponseItem type: object UpsertProductsRequest: items: additionalProperties: anyOf: - type: integer - type: number - type: string - type: boolean - type: 'null' type: object title: UpsertProductsRequest type: array UpsertProductsResponse: items: $ref: '#/components/schemas/UpsertProductsResponseItem' title: UpsertProductsResponse type: array UpsertProductsResponseItem: properties: errors: anyOf: - items: type: string type: array - type: 'null' title: Errors product_id_value: anyOf: - type: string - type: 'null' title: Product Id Value status: title: Status type: string required: - product_id_value - status - errors title: UpsertProductsResponseItem type: object ValidationError: properties: loc: items: anyOf: - type: string - type: integer title: Location type: array msg: title: Message type: string type: title: Error Type type: string required: - loc - msg - type title: ValidationError type: object description: 'Retrieve the list of catalogues associated to an account. Entries where `role` is `additional_source` represent additional sources. Their `catalogue_id` are listed under the `additional_sources` field of the main catalogues referencing them. **Closed Beta – Authorised Users Only** This endpoint is under development and available only to approved beta participants. Contact [our support](mailto:help@lengow.com).' operationId: list_catalogues_public_catalogues_get parameters: - description: The ID of the account in: query name: account_id required: true schema: description: The ID of the account title: Account Id type: integer - description: Page number (starts at 1) in: query name: page required: false schema: default: 1 description: Page number (starts at 1) minimum: 1 title: Page type: integer - description: Number of items per page in: query name: limit required: false schema: default: 20 description: Number of items per page maximum: 100 minimum: 1 title: Limit type: integer responses: '200': content: application/json: example: data: - additional_sources: - 124 catalogue_id: 123 channels_count: 3 name: Spring Collection product_id_key: sku role: main_source status: enabled - catalogue_id: 124 channels_count: 2 name: Summer Collection product_id_key: product_code role: additional_source status: disabled used_by: - 123 - catalogue_id: 125 channels_count: 5 name: Winter Collection product_id_key: sku role: main_source status: enabled limit: 20 next: /catalogues?account_id=1&page=2&limit=20 page: 1 total: 3 schema: $ref: '#/components/schemas/ListCataloguesResponse' description: A list of catalogues associated with the account. '422': content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' description: Validation Error '429': $ref: '#/components/responses/TooManyRequests' summary: '[BETA] List catalogues' tags: - Catalogues /v1.0/catalogues/{catalogue_id}: get: DeleteProductResponse: description: Response model for single product deletion. properties: product_id_value: description: The ID of the deleted product title: Product Id Value type: string status: description: The deletion status title: Status type: string required: - product_id_value - status title: DeleteProductResponse type: object DeleteProductsResponse: description: Response model for deleting multiple products. items: $ref: '#/components/schemas/DeleteProductsResponseItem' title: DeleteProductsResponse type: array DeleteProductsResponseItem: description: Response item for a single product deletion. properties: product_id_value: title: Product Id Value type: string status: title: Status type: string required: - product_id_value - status title: DeleteProductsResponseItem type: object DuplicateRulesRequest: examples: - rule_ids: - 1 - 2 - 3 target_catalogue_ids: - 200 - 201 user_id: 42 properties: rule_ids: items: type: integer title: Rule Ids type: array uniqueItems: true target_catalogue_ids: items: type: integer title: Target Catalogue Ids type: array uniqueItems: true user_id: title: User Id type: integer required: - user_id - target_catalogue_ids - rule_ids title: DuplicateRulesRequest type: object GetCatalogueResponse: properties: additional_sources: anyOf: - items: type: integer type: array - type: 'null' title: Additional Sources catalogue_id: title: Catalogue Id type: integer created_at: title: Created At type: string indexed_at: anyOf: - type: string - type: 'null' title: Indexed At name: title: Name type: string product_id_key: title: Product Id Key type: string products_count: title: Products Count type: integer source: title: Source type: string status: title: Status type: string updated_at: title: Updated At type: string required: - catalogue_id - name - status - product_id_key - created_at - updated_at - indexed_at - source - products_count title: GetCatalogueResponse type: object GetProductResponse: additionalProperties: true title: GetProductResponse type: object HTTPValidationError: properties: detail: items: $ref: '#/components/schemas/ValidationError' title: Detail type: array title: HTTPValidationError type: object ListAttributesResponse: $ref: '#/components/schemas/PaginatedResultWithNext_str_' title: ListAttributesResponse ListCataloguesResponse: $ref: '#/components/schemas/PaginatedResultWithNext_ListCataloguesResponseItem_-Output' title: ListCataloguesResponse ListCataloguesResponseItem-Input: properties: additional_sources: anyOf: - items: type: integer type: array - type: 'null' title: Additional Sources catalogue_id: title: Catalogue Id type: integer channels_count: title: Channels Count type: integer name: title: Name type: string product_id_key: title: Product Id Key type: string role: title: Role type: string status: title: Status type: string used_by: anyOf: - items: type: integer type: array - type: 'null' title: Used By required: - catalogue_id - name - status - product_id_key - role - additional_sources - used_by - channels_count title: ListCataloguesResponseItem type: object ListCataloguesResponseItem-Output: properties: additional_sources: anyOf: - items: type: integer type: array - type: 'null' title: Additional Sources catalogue_id: title: Catalogue Id type: integer channels_count: title: Channels Count type: integer name: title: Name type: string product_id_key: title: Product Id Key type: string role: title: Role type: string status: title: Status type: string used_by: anyOf: - items: type: integer type: array - type: 'null' title: Used By required: - catalogue_id - name - status - product_id_key - role - channels_count title: ListCataloguesResponseItem type: object ListProductsResponse: $ref: '#/components/schemas/PaginatedResultWithNext_ListProductsResponseItem_' title: ListProductsResponse ListProductsResponseItem: properties: attributes: additionalProperties: true title: Attributes type: object product_id_value: title: Product Id Value type: string required: - product_id_value - attributes title: ListProductsResponseItem type: object PaginatedResultWithNext_ListCataloguesResponseItem_-Input: properties: data: items: $ref: '#/components/schemas/ListCataloguesResponseItem-Input' title: Data type: array limit: title: Limit type: integer next: anyOf: - type: string - type: 'null' title: Next page: title: Page type: integer total: title: Total type: integer required: - data - total - page - limit - next title: PaginatedResultWithNext[ListCataloguesResponseItem] type: object PaginatedResultWithNext_ListCataloguesResponseItem_-Output: properties: data: items: $ref: '#/components/schemas/ListCataloguesResponseItem-Output' title: Data type: array limit: title: Limit type: integer next: anyOf: - type: string - type: 'null' title: Next page: title: Page type: integer total: title: Total type: integer required: - data - total - page - limit - next title: PaginatedResultWithNext[ListCataloguesResponseItem] type: object PaginatedResultWithNext_ListProductsResponseItem_: properties: data: items: $ref: '#/components/schemas/ListProductsResponseItem' title: Data type: array limit: title: Limit type: integer next: anyOf: - type: string - type: 'null' title: Next page: title: Page type: integer total: title: Total type: integer required: - data - total - page - limit - next title: PaginatedResultWithNext[ListProductsResponseItem] type: object PaginatedResultWithNext_str_: properties: data: items: type: string title: Data type: array limit: title: Limit type: integer next: anyOf: - type: string - type: 'null' title: Next page: title: Page type: integer total: title: Total type: integer required: - data - total - page - limit - next title: PaginatedResultWithNext[str] type: object RuleDuplicationAttributeResponse: properties: key: description: The identifier of the attribute in the system examples: - price - SRC_123456:quantity title: Key type: string name: description: The name of the attribute examples: - price - quantity title: Name type: string source: description: The ID of the source this attribute is attached to title: Source type: integer required: - name - key - source title: RuleDuplicationAttributeResponse type: object RuleDuplicationErrorResponse: properties: attribute: anyOf: - $ref: '#/components/schemas/RuleDuplicationAttributeResponse' - type: 'null' description: The attribute related to the error, if applicable attributes: anyOf: - items: $ref: '#/components/schemas/RuleDuplicationAttributeResponse' type: array - type: 'null' description: The list of attributes related to the error, if applicable title: Attributes error_code: description: The error code identifying the type of duplication error enum: - rule_duplication.self_duplication - rule_duplication.source_rule.not_found - rule_duplication.validity_period - rule_duplication.referenced_attributes.not_found - rule_duplication.target_attribute.duplicate_new_on_not_new - rule_duplication.target_attribute.duplicate_not_new_on_new - rule_duplication.target_attribute.not_found - rule_duplication.target_attribute.default_rule.already_exists - rule_duplication.target_attribute.default_rule.already_duplicated - rule_duplication.unknown_error - catalogue.not_found title: Error Code type: string message: description: A human-readable message describing the error title: Message type: string required: - error_code - message title: RuleDuplicationErrorResponse type: object RuleDuplicationOperationEntryResponse: properties: errors: anyOf: - items: $ref: '#/components/schemas/RuleDuplicationErrorResponse' type: array - type: 'null' title: Errors new_rule_id: anyOf: - type: integer - type: 'null' title: New Rule Id source_catalogue_id: title: Source Catalogue Id type: integer source_rule_id: title: Source Rule Id type: integer success: title: Success type: boolean target_catalogue_id: title: Target Catalogue Id type: integer warnings: anyOf: - items: $ref: '#/components/schemas/RuleDuplicationErrorResponse' type: array - type: 'null' title: Warnings required: - source_rule_id - source_catalogue_id - target_catalogue_id - success title: RuleDuplicationOperationEntryResponse type: object RuleDuplicationOperationResponse: examples: - created_at: '2026-05-19T09:17:20.989272+00:00' failure_count: 1 operation_id: 019e3f81-3f25-716f-8ee3-b7f651ede48e results: - new_rule_id: 74 source_catalogue_id: 1 source_rule_id: 19 success: true target_catalogue_id: 4 - errors: - error_code: rule_duplication.unknown_error message: 'Failed to duplicate rule 1: Missing required attribute ''quantity''.' source_catalogue_id: 1 source_rule_id: 1 success: false target_catalogue_id: 4 - new_rule_id: 72 source_catalogue_id: 1 source_rule_id: 2 success: true target_catalogue_id: 4 warnings: - message: The rule has a validity period that will not be duplicated. warning_code: rule_duplication.validity_period - new_rule_id: 73 source_catalogue_id: 1 source_rule_id: 3 success: true target_catalogue_id: 4 success_count: 3 total_rules: 4 user_id: 123 properties: created_at: anyOf: - format: date-time type: string - type: 'null' title: Created At failure_count: title: Failure Count type: integer operation_id: title: Operation Id type: string results: items: $ref: '#/components/schemas/RuleDuplicationOperationEntryResponse' title: Results type: array success_count: title: Success Count type: integer total_rules: title: Total Rules type: integer user_id: anyOf: - type: integer - type: 'null' title: User Id required: - operation_id - total_rules - success_count - failure_count - results title: RuleDuplicationOperationResponse type: object UpdateProductRequest: additionalProperties: anyOf: - type: integer - type: number - type: string - type: boolean - type: 'null' title: UpdateProductRequest type: object UpdateProductResponse: title: UpdateProductResponse UpdateProductsRequest: additionalProperties: $ref: '#/components/schemas/UpdateProductsRequestItem' title: UpdateProductsRequest type: object UpdateProductsRequestItem: additionalProperties: anyOf: - type: integer - type: number - type: string - type: boolean - type: 'null' title: UpdateProductsRequestItem type: object UpdateProductsResponse: additionalProperties: $ref: '#/components/schemas/UpdateProductsResponseItem' title: UpdateProductsResponse type: object UpdateProductsResponseItem: properties: errors: anyOf: - items: type: string type: array - type: 'null' title: Errors status: title: Status type: string required: - status title: UpdateProductsResponseItem type: object UpsertProductsRequest: items: additionalProperties: anyOf: - type: integer - type: number - type: string - type: boolean - type: 'null' type: object title: UpsertProductsRequest type: array UpsertProductsResponse: items: $ref: '#/components/schemas/UpsertProductsResponseItem' title: UpsertProductsResponse type: array UpsertProductsResponseItem: properties: errors: anyOf: - items: type: string type: array - type: 'null' title: Errors product_id_value: anyOf: - type: string - type: 'null' title: Product Id Value status: title: Status type: string required: - product_id_value - status - errors title: UpsertProductsResponseItem type: object ValidationError: properties: loc: items: anyOf: - type: string - type: integer title: Location type: array msg: title: Message type: string type: title: Error Type type: string required: - loc - msg - type title: ValidationError type: object description: 'Retrieve a specific catalogue by its catalogue_id. The catalogue_id can be retrieved via the “List catalogues” endpoint, which returns all catalogue IDs and names available on your account. **Closed Beta – Authorised Users Only** This endpoint is under development and available only to approved beta participants. Contact [our support](mailto:help@lengow.com).' operationId: get_catalogue_public_catalogues__catalogue_id__get parameters: - description: The ID of the catalogue to retrieve in: path name: catalogue_id required: true schema: description: The ID of the catalogue to retrieve title: Catalogue Id type: integer - description: The ID of the account in: query name: account_id required: true schema: description: The ID of the account title: Account Id type: integer responses: '200': content: application/json: example: additional_sources: - 124 - 125 catalogue_id: 123 created_at: '2024-01-15T10:00:00Z' indexed_at: '2024-06-15T09:15:00Z' name: Spring Collection product_id_key: SKU products_count: 2500 source: Akeneo status: enabled updated_at: '2024-06-10T12:30:00Z' schema: $ref: '#/components/schemas/GetCatalogueResponse' description: Catalogue metadata retrieved successfully. '404': content: application/json: example: detail: error_code: catalogue.not_found message: Catalogue 123 not found in account 890 description: Catalogue not found for the given account. '422': content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' description: Validation Error '429': $ref: '#/components/responses/TooManyRequests' summary: '[BETA] Get catalogue' tags: - Catalogues /v1.0/catalogues/{catalogue_id}/attributes: get: DeleteProductResponse: description: Response model for single product deletion. properties: product_id_value: description: The ID of the deleted product title: Product Id Value type: string status: description: The deletion status title: Status type: string required: - product_id_value - status title: DeleteProductResponse type: object DeleteProductsResponse: description: Response model for deleting multiple products. items: $ref: '#/components/schemas/DeleteProductsResponseItem' title: DeleteProductsResponse type: array DeleteProductsResponseItem: description: Response item for a single product deletion. properties: product_id_value: title: Product Id Value type: string status: title: Status type: string required: - product_id_value - status title: DeleteProductsResponseItem type: object DuplicateRulesRequest: examples: - rule_ids: - 1 - 2 - 3 target_catalogue_ids: - 200 - 201 user_id: 42 properties: rule_ids: items: type: integer title: Rule Ids type: array uniqueItems: true target_catalogue_ids: items: type: integer title: Target Catalogue Ids type: array uniqueItems: true user_id: title: User Id type: integer required: - user_id - target_catalogue_ids - rule_ids title: DuplicateRulesRequest type: object GetCatalogueResponse: properties: additional_sources: anyOf: - items: type: integer type: array - type: 'null' title: Additional Sources catalogue_id: title: Catalogue Id type: integer created_at: title: Created At type: string indexed_at: anyOf: - type: string - type: 'null' title: Indexed At name: title: Name type: string product_id_key: title: Product Id Key type: string products_count: title: Products Count type: integer source: title: Source type: string status: title: Status type: string updated_at: title: Updated At type: string required: - catalogue_id - name - status - product_id_key - created_at - updated_at - indexed_at - source - products_count title: GetCatalogueResponse type: object GetProductResponse: additionalProperties: true title: GetProductResponse type: object HTTPValidationError: properties: detail: items: $ref: '#/components/schemas/ValidationError' title: Detail type: array title: HTTPValidationError type: object ListAttributesResponse: $ref: '#/components/schemas/PaginatedResultWithNext_str_' title: ListAttributesResponse ListCataloguesResponse: $ref: '#/components/schemas/PaginatedResultWithNext_ListCataloguesResponseItem_-Output' title: ListCataloguesResponse ListCataloguesResponseItem-Input: properties: additional_sources: anyOf: - items: type: integer type: array - type: 'null' title: Additional Sources catalogue_id: title: Catalogue Id type: integer channels_count: title: Channels Count type: integer name: title: Name type: string product_id_key: title: Product Id Key type: string role: title: Role type: string status: title: Status type: string used_by: anyOf: - items: type: integer type: array - type: 'null' title: Used By required: - catalogue_id - name - status - product_id_key - role - additional_sources - used_by - channels_count title: ListCataloguesResponseItem type: object ListCataloguesResponseItem-Output: properties: additional_sources: anyOf: - items: type: integer type: array - type: 'null' title: Additional Sources catalogue_id: title: Catalogue Id type: integer channels_count: title: Channels Count type: integer name: title: Name type: string product_id_key: title: Product Id Key type: string role: title: Role type: string status: title: Status type: string used_by: anyOf: - items: type: integer type: array - type: 'null' title: Used By required: - catalogue_id - name - status - product_id_key - role - channels_count title: ListCataloguesResponseItem type: object ListProductsResponse: $ref: '#/components/schemas/PaginatedResultWithNext_ListProductsResponseItem_' title: ListProductsResponse ListProductsResponseItem: properties: attributes: additionalProperties: true title: Attributes type: object product_id_value: title: Product Id Value type: string required: - product_id_value - attributes title: ListProductsResponseItem type: object PaginatedResultWithNext_ListCataloguesResponseItem_-Input: properties: data: items: $ref: '#/components/schemas/ListCataloguesResponseItem-Input' title: Data type: array limit: title: Limit type: integer next: anyOf: - type: string - type: 'null' title: Next page: title: Page type: integer total: title: Total type: integer required: - data - total - page - limit - next title: PaginatedResultWithNext[ListCataloguesResponseItem] type: object PaginatedResultWithNext_ListCataloguesResponseItem_-Output: properties: data: items: $ref: '#/components/schemas/ListCataloguesResponseItem-Output' title: Data type: array limit: title: Limit type: integer next: anyOf: - type: string - type: 'null' title: Next page: title: Page type: integer total: title: Total type: integer required: - data - total - page - limit - next title: PaginatedResultWithNext[ListCataloguesResponseItem] type: object PaginatedResultWithNext_ListProductsResponseItem_: properties: data: items: $ref: '#/components/schemas/ListProductsResponseItem' title: Data type: array limit: title: Limit type: integer next: anyOf: - type: string - type: 'null' title: Next page: title: Page type: integer total: title: Total type: integer required: - data - total - page - limit - next title: PaginatedResultWithNext[ListProductsResponseItem] type: object PaginatedResultWithNext_str_: properties: data: items: type: string title: Data type: array limit: title: Limit type: integer next: anyOf: - type: string - type: 'null' title: Next page: title: Page type: integer total: title: Total type: integer required: - data - total - page - limit - next title: PaginatedResultWithNext[str] type: object RuleDuplicationAttributeResponse: properties: key: description: The identifier of the attribute in the system examples: - price - SRC_123456:quantity title: Key type: string name: description: The name of the attribute examples: - price - quantity title: Name type: string source: description: The ID of the source this attribute is attached to title: Source type: integer required: - name - key - source title: RuleDuplicationAttributeResponse type: object RuleDuplicationErrorResponse: properties: attribute: anyOf: - $ref: '#/components/schemas/RuleDuplicationAttributeResponse' - type: 'null' description: The attribute related to the error, if applicable attributes: anyOf: - items: $ref: '#/components/schemas/RuleDuplicationAttributeResponse' type: array - type: 'null' description: The list of attributes related to the error, if applicable title: Attributes error_code: description: The error code identifying the type of duplication error enum: - rule_duplication.self_duplication - rule_duplication.source_rule.not_found - rule_duplication.validity_period - rule_duplication.referenced_attributes.not_found - rule_duplication.target_attribute.duplicate_new_on_not_new - rule_duplication.target_attribute.duplicate_not_new_on_new - rule_duplication.target_attribute.not_found - rule_duplication.target_attribute.default_rule.already_exists - rule_duplication.target_attribute.default_rule.already_duplicated - rule_duplication.unknown_error - catalogue.not_found title: Error Code type: string message: description: A human-readable message describing the error title: Message type: string required: - error_code - message title: RuleDuplicationErrorResponse type: object RuleDuplicationOperationEntryResponse: properties: errors: anyOf: - items: $ref: '#/components/schemas/RuleDuplicationErrorResponse' type: array - type: 'null' title: Errors new_rule_id: anyOf: - type: integer - type: 'null' title: New Rule Id source_catalogue_id: title: Source Catalogue Id type: integer source_rule_id: title: Source Rule Id type: integer success: title: Success type: boolean target_catalogue_id: title: Target Catalogue Id type: integer warnings: anyOf: - items: $ref: '#/components/schemas/RuleDuplicationErrorResponse' type: array - type: 'null' title: Warnings required: - source_rule_id - source_catalogue_id - target_catalogue_id - success title: RuleDuplicationOperationEntryResponse type: object RuleDuplicationOperationResponse: examples: - created_at: '2026-05-19T09:17:20.989272+00:00' failure_count: 1 operation_id: 019e3f81-3f25-716f-8ee3-b7f651ede48e results: - new_rule_id: 74 source_catalogue_id: 1 source_rule_id: 19 success: true target_catalogue_id: 4 - errors: - error_code: rule_duplication.unknown_error message: 'Failed to duplicate rule 1: Missing required attribute ''quantity''.' source_catalogue_id: 1 source_rule_id: 1 success: false target_catalogue_id: 4 - new_rule_id: 72 source_catalogue_id: 1 source_rule_id: 2 success: true target_catalogue_id: 4 warnings: - message: The rule has a validity period that will not be duplicated. warning_code: rule_duplication.validity_period - new_rule_id: 73 source_catalogue_id: 1 source_rule_id: 3 success: true target_catalogue_id: 4 success_count: 3 total_rules: 4 user_id: 123 properties: created_at: anyOf: - format: date-time type: string - type: 'null' title: Created At failure_count: title: Failure Count type: integer operation_id: title: Operation Id type: string results: items: $ref: '#/components/schemas/RuleDuplicationOperationEntryResponse' title: Results type: array success_count: title: Success Count type: integer total_rules: title: Total Rules type: integer user_id: anyOf: - type: integer - type: 'null' title: User Id required: - operation_id - total_rules - success_count - failure_count - results title: RuleDuplicationOperationResponse type: object UpdateProductRequest: additionalProperties: anyOf: - type: integer - type: number - type: string - type: boolean - type: 'null' title: UpdateProductRequest type: object UpdateProductResponse: title: UpdateProductResponse UpdateProductsRequest: additionalProperties: $ref: '#/components/schemas/UpdateProductsRequestItem' title: UpdateProductsRequest type: object UpdateProductsRequestItem: additionalProperties: anyOf: - type: integer - type: number - type: string - type: boolean - type: 'null' title: UpdateProductsRequestItem type: object UpdateProductsResponse: additionalProperties: $ref: '#/components/schemas/UpdateProductsResponseItem' title: UpdateProductsResponse type: object UpdateProductsResponseItem: properties: errors: anyOf: - items: type: string type: array - type: 'null' title: Errors status: title: Status type: string required: - status title: UpdateProductsResponseItem type: object UpsertProductsRequest: items: additionalProperties: anyOf: - type: integer - type: number - type: string - type: boolean - type: 'null' type: object title: UpsertProductsRequest type: array UpsertProductsResponse: items: $ref: '#/components/schemas/UpsertProductsResponseItem' title: UpsertProductsResponse type: array UpsertProductsResponseItem: properties: errors: anyOf: - items: type: string type: array - type: 'null' title: Errors product_id_value: anyOf: - type: string - type: 'null' title: Product Id Value status: title: Status type: string required: - product_id_value - status - errors title: UpsertProductsResponseItem type: object ValidationError: properties: loc: items: anyOf: - type: string - type: integer title: Location type: array msg: title: Message type: string type: title: Error Type type: string required: - loc - msg - type title: ValidationError type: object description: 'Retrieve the list of attributes available in a catalogue. Use this endpoint to confirm the exact attribute keys accepted by product write endpoints such as PATCH /catalogues/{catalogue_id}/products. **Closed Beta – Authorised Users Only** This endpoint is under development and available only to approved beta participants. Contact [our support](mailto:help@lengow.com).' operationId: list_attributes_public_catalogues__catalogue_id__attributes_get parameters: - description: The ID of the catalogue in: path name: catalogue_id required: true schema: description: The ID of the catalogue title: Catalogue Id type: integer - description: The ID of the account in: query name: account_id required: true schema: description: The ID of the account title: Account Id type: integer - description: Page number (starts at 1) in: query name: page required: false schema: default: 1 description: Page number (starts at 1) minimum: 1 title: Page type: integer - description: Number of items per page in: query name: limit required: false schema: default: 50 description: Number of items per page maximum: 200 minimum: 1 title: Limit type: integer responses: '200': content: application/json: example: data: - SKU - color - size - material limit: 50 page: 1 total: 4 schema: $ref: '#/components/schemas/ListAttributesResponse' description: A paginated list of attribute keys. '404': content: application/json: example: detail: error_code: catalogue.not_found message: Catalogue 123 not found in account 890 description: Catalogue not found for the given account. '422': content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' description: Validation Error '429': $ref: '#/components/responses/TooManyRequests' summary: '[BETA] List attributes' tags: - Catalogues /v1.0/catalogues/{catalogue_id}/products: delete: DeleteProductResponse: description: Response model for single product deletion. properties: product_id_value: description: The ID of the deleted product title: Product Id Value type: string status: description: The deletion status title: Status type: string required: - product_id_value - status title: DeleteProductResponse type: object DeleteProductsResponse: description: Response model for deleting multiple products. items: $ref: '#/components/schemas/DeleteProductsResponseItem' title: DeleteProductsResponse type: array DeleteProductsResponseItem: description: Response item for a single product deletion. properties: product_id_value: title: Product Id Value type: string status: title: Status type: string required: - product_id_value - status title: DeleteProductsResponseItem type: object DuplicateRulesRequest: examples: - rule_ids: - 1 - 2 - 3 target_catalogue_ids: - 200 - 201 user_id: 42 properties: rule_ids: items: type: integer title: Rule Ids type: array uniqueItems: true target_catalogue_ids: items: type: integer title: Target Catalogue Ids type: array uniqueItems: true user_id: title: User Id type: integer required: - user_id - target_catalogue_ids - rule_ids title: DuplicateRulesRequest type: object GetCatalogueResponse: properties: additional_sources: anyOf: - items: type: integer type: array - type: 'null' title: Additional Sources catalogue_id: title: Catalogue Id type: integer created_at: title: Created At type: string indexed_at: anyOf: - type: string - type: 'null' title: Indexed At name: title: Name type: string product_id_key: title: Product Id Key type: string products_count: title: Products Count type: integer source: title: Source type: string status: title: Status type: string updated_at: title: Updated At type: string required: - catalogue_id - name - status - product_id_key - created_at - updated_at - indexed_at - source - products_count title: GetCatalogueResponse type: object GetProductResponse: additionalProperties: true title: GetProductResponse type: object HTTPValidationError: properties: detail: items: $ref: '#/components/schemas/ValidationError' title: Detail type: array title: HTTPValidationError type: object ListAttributesResponse: $ref: '#/components/schemas/PaginatedResultWithNext_str_' title: ListAttributesResponse ListCataloguesResponse: $ref: '#/components/schemas/PaginatedResultWithNext_ListCataloguesResponseItem_-Output' title: ListCataloguesResponse ListCataloguesResponseItem-Input: properties: additional_sources: anyOf: - items: type: integer type: array - type: 'null' title: Additional Sources catalogue_id: title: Catalogue Id type: integer channels_count: title: Channels Count type: integer name: title: Name type: string product_id_key: title: Product Id Key type: string role: title: Role type: string status: title: Status type: string used_by: anyOf: - items: type: integer type: array - type: 'null' title: Used By required: - catalogue_id - name - status - product_id_key - role - additional_sources - used_by - channels_count title: ListCataloguesResponseItem type: object ListCataloguesResponseItem-Output: properties: additional_sources: anyOf: - items: type: integer type: array - type: 'null' title: Additional Sources catalogue_id: title: Catalogue Id type: integer channels_count: title: Channels Count type: integer name: title: Name type: string product_id_key: title: Product Id Key type: string role: title: Role type: string status: title: Status type: string used_by: anyOf: - items: type: integer type: array - type: 'null' title: Used By required: - catalogue_id - name - status - product_id_key - role - channels_count title: ListCataloguesResponseItem type: object ListProductsResponse: $ref: '#/components/schemas/PaginatedResultWithNext_ListProductsResponseItem_' title: ListProductsResponse ListProductsResponseItem: properties: attributes: additionalProperties: true title: Attributes type: object product_id_value: title: Product Id Value type: string required: - product_id_value - attributes title: ListProductsResponseItem type: object PaginatedResultWithNext_ListCataloguesResponseItem_-Input: properties: data: items: $ref: '#/components/schemas/ListCataloguesResponseItem-Input' title: Data type: array limit: title: Limit type: integer next: anyOf: - type: string - type: 'null' title: Next page: title: Page type: integer total: title: Total type: integer required: - data - total - page - limit - next title: PaginatedResultWithNext[ListCataloguesResponseItem] type: object PaginatedResultWithNext_ListCataloguesResponseItem_-Output: properties: data: items: $ref: '#/components/schemas/ListCataloguesResponseItem-Output' title: Data type: array limit: title: Limit type: integer next: anyOf: - type: string - type: 'null' title: Next page: title: Page type: integer total: title: Total type: integer required: - data - total - page - limit - next title: PaginatedResultWithNext[ListCataloguesResponseItem] type: object PaginatedResultWithNext_ListProductsResponseItem_: properties: data: items: $ref: '#/components/schemas/ListProductsResponseItem' title: Data type: array limit: title: Limit type: integer next: anyOf: - type: string - type: 'null' title: Next page: title: Page type: integer total: title: Total type: integer required: - data - total - page - limit - next title: PaginatedResultWithNext[ListProductsResponseItem] type: object PaginatedResultWithNext_str_: properties: data: items: type: string title: Data type: array limit: title: Limit type: integer next: anyOf: - type: string - type: 'null' title: Next page: title: Page type: integer total: title: Total type: integer required: - data - total - page - limit - next title: PaginatedResultWithNext[str] type: object RuleDuplicationAttributeResponse: properties: key: description: The identifier of the attribute in the system examples: - price - SRC_123456:quantity title: Key type: string name: description: The name of the attribute examples: - price - quantity title: Name type: string source: description: The ID of the source this attribute is attached to title: Source type: integer required: - name - key - source title: RuleDuplicationAttributeResponse type: object RuleDuplicationErrorResponse: properties: attribute: anyOf: - $ref: '#/components/schemas/RuleDuplicationAttributeResponse' - type: 'null' description: The attribute related to the error, if applicable attributes: anyOf: - items: $ref: '#/components/schemas/RuleDuplicationAttributeResponse' type: array - type: 'null' description: The list of attributes related to the error, if applicable title: Attributes error_code: description: The error code identifying the type of duplication error enum: - rule_duplication.self_duplication - rule_duplication.source_rule.not_found - rule_duplication.validity_period - rule_duplication.referenced_attributes.not_found - rule_duplication.target_attribute.duplicate_new_on_not_new - rule_duplication.target_attribute.duplicate_not_new_on_new - rule_duplication.target_attribute.not_found - rule_duplication.target_attribute.default_rule.already_exists - rule_duplication.target_attribute.default_rule.already_duplicated - rule_duplication.unknown_error - catalogue.not_found title: Error Code type: string message: description: A human-readable message describing the error title: Message type: string required: - error_code - message title: RuleDuplicationErrorResponse type: object RuleDuplicationOperationEntryResponse: properties: errors: anyOf: - items: $ref: '#/components/schemas/RuleDuplicationErrorResponse' type: array - type: 'null' title: Errors new_rule_id: anyOf: - type: integer - type: 'null' title: New Rule Id source_catalogue_id: title: Source Catalogue Id type: integer source_rule_id: title: Source Rule Id type: integer success: title: Success type: boolean target_catalogue_id: title: Target Catalogue Id type: integer warnings: anyOf: - items: $ref: '#/components/schemas/RuleDuplicationErrorResponse' type: array - type: 'null' title: Warnings required: - source_rule_id - source_catalogue_id - target_catalogue_id - success title: RuleDuplicationOperationEntryResponse type: object RuleDuplicationOperationResponse: examples: - created_at: '2026-05-19T09:17:20.989272+00:00' failure_count: 1 operation_id: 019e3f81-3f25-716f-8ee3-b7f651ede48e results: - new_rule_id: 74 source_catalogue_id: 1 source_rule_id: 19 success: true target_catalogue_id: 4 - errors: - error_code: rule_duplication.unknown_error message: 'Failed to duplicate rule 1: Missing required attribute ''quantity''.' source_catalogue_id: 1 source_rule_id: 1 success: false target_catalogue_id: 4 - new_rule_id: 72 source_catalogue_id: 1 source_rule_id: 2 success: true target_catalogue_id: 4 warnings: - message: The rule has a validity period that will not be duplicated. warning_code: rule_duplication.validity_period - new_rule_id: 73 source_catalogue_id: 1 source_rule_id: 3 success: true target_catalogue_id: 4 success_count: 3 total_rules: 4 user_id: 123 properties: created_at: anyOf: - format: date-time type: string - type: 'null' title: Created At failure_count: title: Failure Count type: integer operation_id: title: Operation Id type: string results: items: $ref: '#/components/schemas/RuleDuplicationOperationEntryResponse' title: Results type: array success_count: title: Success Count type: integer total_rules: title: Total Rules type: integer user_id: anyOf: - type: integer - type: 'null' title: User Id required: - operation_id - total_rules - success_count - failure_count - results title: RuleDuplicationOperationResponse type: object UpdateProductRequest: additionalProperties: anyOf: - type: integer - type: number - type: string - type: boolean - type: 'null' title: UpdateProductRequest type: object UpdateProductResponse: title: UpdateProductResponse UpdateProductsRequest: additionalProperties: $ref: '#/components/schemas/UpdateProductsRequestItem' title: UpdateProductsRequest type: object UpdateProductsRequestItem: additionalProperties: anyOf: - type: integer - type: number - type: string - type: boolean - type: 'null' title: UpdateProductsRequestItem type: object UpdateProductsResponse: additionalProperties: $ref: '#/components/schemas/UpdateProductsResponseItem' title: UpdateProductsResponse type: object UpdateProductsResponseItem: properties: errors: anyOf: - items: type: string type: array - type: 'null' title: Errors status: title: Status type: string required: - status title: UpdateProductsResponseItem type: object UpsertProductsRequest: items: additionalProperties: anyOf: - type: integer - type: number - type: string - type: boolean - type: 'null' type: object title: UpsertProductsRequest type: array UpsertProductsResponse: items: $ref: '#/components/schemas/UpsertProductsResponseItem' title: UpsertProductsResponse type: array UpsertProductsResponseItem: properties: errors: anyOf: - items: type: string type: array - type: 'null' title: Errors product_id_value: anyOf: - type: string - type: 'null' title: Product Id Value status: title: Status type: string required: - product_id_value - status - errors title: UpsertProductsResponseItem type: object ValidationError: properties: loc: items: anyOf: - type: string - type: integer title: Location type: array msg: title: Message type: string type: title: Error Type type: string required: - loc - msg - type title: ValidationError type: object description: 'Delete multiple products from the catalogue. Provide a list of product IDs to delete. The response will indicate the status of each deletion operation. **Closed Beta – Authorised Users Only** This endpoint is under development and available only to approved beta participants. Contact [our support](mailto:help@lengow.com).' operationId: delete_products_public_catalogues__catalogue_id__products_delete parameters: - description: The ID of the catalogue in: path name: catalogue_id required: true schema: description: The ID of the catalogue title: Catalogue Id type: integer - description: The ID of the account in: query name: account_id required: true schema: description: The ID of the account title: Account Id type: integer - description: 'Product IDs to delete. Can be specified multiple times. - Each ID must correspond to a product_id_value in the catalogue. - A request is limited to 100 products at once.' in: query name: product_ids required: true schema: description: 'Product IDs to delete. Can be specified multiple times. - Each ID must correspond to a product_id_value in the catalogue. - A request is limited to 100 products at once.' examples: - product_123 - product_456 items: type: string title: Product Ids type: array responses: '207': content: application/json: example: - product_id_value: product_123 status: deleted - product_id_value: product_456 status: deleted - product_id_value: product_789 status: not_found schema: $ref: '#/components/schemas/DeleteProductsResponse' description: A multi-status response with results for each product. '404': content: application/json: example: detail: error_code: catalogue.not_found message: Catalogue 123 not found in account 890 description: Catalogue not found in the specified account. '409': content: application/json: example: detail: error_code: catalogue.draft.forbidden_operation message: Cannot perform product operations on draft catalogue 123. description: Catalogue is in draft status; operation forbidden. '422': content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' description: Validation Error '429': $ref: '#/components/responses/TooManyRequests' summary: '[BETA] Delete multiple products' tags: - Catalogues get: DeleteProductResponse: description: Response model for single product deletion. properties: product_id_value: description: The ID of the deleted product title: Product Id Value type: string status: description: The deletion status title: Status type: string required: - product_id_value - status title: DeleteProductResponse type: object DeleteProductsResponse: description: Response model for deleting multiple products. items: $ref: '#/components/schemas/DeleteProductsResponseItem' title: DeleteProductsResponse type: array DeleteProductsResponseItem: description: Response item for a single product deletion. properties: product_id_value: title: Product Id Value type: string status: title: Status type: string required: - product_id_value - status title: DeleteProductsResponseItem type: object DuplicateRulesRequest: examples: - rule_ids: - 1 - 2 - 3 target_catalogue_ids: - 200 - 201 user_id: 42 properties: rule_ids: items: type: integer title: Rule Ids type: array uniqueItems: true target_catalogue_ids: items: type: integer title: Target Catalogue Ids type: array uniqueItems: true user_id: title: User Id type: integer required: - user_id - target_catalogue_ids - rule_ids title: DuplicateRulesRequest type: object GetCatalogueResponse: properties: additional_sources: anyOf: - items: type: integer type: array - type: 'null' title: Additional Sources catalogue_id: title: Catalogue Id type: integer created_at: title: Created At type: string indexed_at: anyOf: - type: string - type: 'null' title: Indexed At name: title: Name type: string product_id_key: title: Product Id Key type: string products_count: title: Products Count type: integer source: title: Source type: string status: title: Status type: string updated_at: title: Updated At type: string required: - catalogue_id - name - status - product_id_key - created_at - updated_at - indexed_at - source - products_count title: GetCatalogueResponse type: object GetProductResponse: additionalProperties: true title: GetProductResponse type: object HTTPValidationError: properties: detail: items: $ref: '#/components/schemas/ValidationError' title: Detail type: array title: HTTPValidationError type: object ListAttributesResponse: $ref: '#/components/schemas/PaginatedResultWithNext_str_' title: ListAttributesResponse ListCataloguesResponse: $ref: '#/components/schemas/PaginatedResultWithNext_ListCataloguesResponseItem_-Output' title: ListCataloguesResponse ListCataloguesResponseItem-Input: properties: additional_sources: anyOf: - items: type: integer type: array - type: 'null' title: Additional Sources catalogue_id: title: Catalogue Id type: integer channels_count: title: Channels Count type: integer name: title: Name type: string product_id_key: title: Product Id Key type: string role: title: Role type: string status: title: Status type: string used_by: anyOf: - items: type: integer type: array - type: 'null' title: Used By required: - catalogue_id - name - status - product_id_key - role - additional_sources - used_by - channels_count title: ListCataloguesResponseItem type: object ListCataloguesResponseItem-Output: properties: additional_sources: anyOf: - items: type: integer type: array - type: 'null' title: Additional Sources catalogue_id: title: Catalogue Id type: integer channels_count: title: Channels Count type: integer name: title: Name type: string product_id_key: title: Product Id Key type: string role: title: Role type: string status: title: Status type: string used_by: anyOf: - items: type: integer type: array - type: 'null' title: Used By required: - catalogue_id - name - status - product_id_key - role - channels_count title: ListCataloguesResponseItem type: object ListProductsResponse: $ref: '#/components/schemas/PaginatedResultWithNext_ListProductsResponseItem_' title: ListProductsResponse ListProductsResponseItem: properties: attributes: additionalProperties: true title: Attributes type: object product_id_value: title: Product Id Value type: string required: - product_id_value - attributes title: ListProductsResponseItem type: object PaginatedResultWithNext_ListCataloguesResponseItem_-Input: properties: data: items: $ref: '#/components/schemas/ListCataloguesResponseItem-Input' title: Data type: array limit: title: Limit type: integer next: anyOf: - type: string - type: 'null' title: Next page: title: Page type: integer total: title: Total type: integer required: - data - total - page - limit - next title: PaginatedResultWithNext[ListCataloguesResponseItem] type: object PaginatedResultWithNext_ListCataloguesResponseItem_-Output: properties: data: items: $ref: '#/components/schemas/ListCataloguesResponseItem-Output' title: Data type: array limit: title: Limit type: integer next: anyOf: - type: string - type: 'null' title: Next page: title: Page type: integer total: title: Total type: integer required: - data - total - page - limit - next title: PaginatedResultWithNext[ListCataloguesResponseItem] type: object PaginatedResultWithNext_ListProductsResponseItem_: properties: data: items: $ref: '#/components/schemas/ListProductsResponseItem' title: Data type: array limit: title: Limit type: integer next: anyOf: - type: string - type: 'null' title: Next page: title: Page type: integer total: title: Total type: integer required: - data - total - page - limit - next title: PaginatedResultWithNext[ListProductsResponseItem] type: object PaginatedResultWithNext_str_: properties: data: items: type: string title: Data type: array limit: title: Limit type: integer next: anyOf: - type: string - type: 'null' title: Next page: title: Page type: integer total: title: Total type: integer required: - data - total - page - limit - next title: PaginatedResultWithNext[str] type: object RuleDuplicationAttributeResponse: properties: key: description: The identifier of the attribute in the system examples: - price - SRC_123456:quantity title: Key type: string name: description: The name of the attribute examples: - price - quantity title: Name type: string source: description: The ID of the source this attribute is attached to title: Source type: integer required: - name - key - source title: RuleDuplicationAttributeResponse type: object RuleDuplicationErrorResponse: properties: attribute: anyOf: - $ref: '#/components/schemas/RuleDuplicationAttributeResponse' - type: 'null' description: The attribute related to the error, if applicable attributes: anyOf: - items: $ref: '#/components/schemas/RuleDuplicationAttributeResponse' type: array - type: 'null' description: The list of attributes related to the error, if applicable title: Attributes error_code: description: The error code identifying the type of duplication error enum: - rule_duplication.self_duplication - rule_duplication.source_rule.not_found - rule_duplication.validity_period - rule_duplication.referenced_attributes.not_found - rule_duplication.target_attribute.duplicate_new_on_not_new - rule_duplication.target_attribute.duplicate_not_new_on_new - rule_duplication.target_attribute.not_found - rule_duplication.target_attribute.default_rule.already_exists - rule_duplication.target_attribute.default_rule.already_duplicated - rule_duplication.unknown_error - catalogue.not_found title: Error Code type: string message: description: A human-readable message describing the error title: Message type: string required: - error_code - message title: RuleDuplicationErrorResponse type: object RuleDuplicationOperationEntryResponse: properties: errors: anyOf: - items: $ref: '#/components/schemas/RuleDuplicationErrorResponse' type: array - type: 'null' title: Errors new_rule_id: anyOf: - type: integer - type: 'null' title: New Rule Id source_catalogue_id: title: Source Catalogue Id type: integer source_rule_id: title: Source Rule Id type: integer success: title: Success type: boolean target_catalogue_id: title: Target Catalogue Id type: integer warnings: anyOf: - items: $ref: '#/components/schemas/RuleDuplicationErrorResponse' type: array - type: 'null' title: Warnings required: - source_rule_id - source_catalogue_id - target_catalogue_id - success title: RuleDuplicationOperationEntryResponse type: object RuleDuplicationOperationResponse: examples: - created_at: '2026-05-19T09:17:20.989272+00:00' failure_count: 1 operation_id: 019e3f81-3f25-716f-8ee3-b7f651ede48e results: - new_rule_id: 74 source_catalogue_id: 1 source_rule_id: 19 success: true target_catalogue_id: 4 - errors: - error_code: rule_duplication.unknown_error message: 'Failed to duplicate rule 1: Missing required attribute ''quantity''.' source_catalogue_id: 1 source_rule_id: 1 success: false target_catalogue_id: 4 - new_rule_id: 72 source_catalogue_id: 1 source_rule_id: 2 success: true target_catalogue_id: 4 warnings: - message: The rule has a validity period that will not be duplicated. warning_code: rule_duplication.validity_period - new_rule_id: 73 source_catalogue_id: 1 source_rule_id: 3 success: true target_catalogue_id: 4 success_count: 3 total_rules: 4 user_id: 123 properties: created_at: anyOf: - format: date-time type: string - type: 'null' title: Created At failure_count: title: Failure Count type: integer operation_id: title: Operation Id type: string results: items: $ref: '#/components/schemas/RuleDuplicationOperationEntryResponse' title: Results type: array success_count: title: Success Count type: integer total_rules: title: Total Rules type: integer user_id: anyOf: - type: integer - type: 'null' title: User Id required: - operation_id - total_rules - success_count - failure_count - results title: RuleDuplicationOperationResponse type: object UpdateProductRequest: additionalProperties: anyOf: - type: integer - type: number - type: string - type: boolean - type: 'null' title: UpdateProductRequest type: object UpdateProductResponse: title: UpdateProductResponse UpdateProductsRequest: additionalProperties: $ref: '#/components/schemas/UpdateProductsRequestItem' title: UpdateProductsRequest type: object UpdateProductsRequestItem: additionalProperties: anyOf: - type: integer - type: number - type: string - type: boolean - type: 'null' title: UpdateProductsRequestItem type: object UpdateProductsResponse: additionalProperties: $ref: '#/components/schemas/UpdateProductsResponseItem' title: UpdateProductsResponse type: object UpdateProductsResponseItem: properties: errors: anyOf: - items: type: string type: array - type: 'null' title: Errors status: title: Status type: string required: - status title: UpdateProductsResponseItem type: object UpsertProductsRequest: items: additionalProperties: anyOf: - type: integer - type: number - type: string - type: boolean - type: 'null' type: object title: UpsertProductsRequest type: array UpsertProductsResponse: items: $ref: '#/components/schemas/UpsertProductsResponseItem' title: UpsertProductsResponse type: array UpsertProductsResponseItem: properties: errors: anyOf: - items: type: string type: array - type: 'null' title: Errors product_id_value: anyOf: - type: string - type: 'null' title: Product Id Value status: title: Status type: string required: - product_id_value - status - errors title: UpsertProductsResponseItem type: object ValidationError: properties: loc: items: anyOf: - type: string - type: integer title: Location type: array msg: title: Message type: string type: title: Error Type type: string required: - loc - msg - type title: ValidationError type: object description: 'Retrieve the list of all products in a catalogue. **Closed Beta – Authorised Users Only** This endpoint is under development and available only to approved beta participants. Contact [our support](mailto:help@lengow.com).' operationId: list_products_public_catalogues__catalogue_id__products_get parameters: - description: The ID of the catalogue in: path name: catalogue_id required: true schema: description: The ID of the catalogue title: Catalogue Id type: integer - description: The ID of the account in: query name: account_id required: true schema: description: The ID of the account title: Account Id type: integer - description: Page number (starts at 1) in: query name: page required: false schema: default: 1 description: Page number (starts at 1) minimum: 1 title: Page type: integer - description: Number of items per page in: query name: limit required: false schema: default: 20 description: Number of items per page maximum: 100 minimum: 1 title: Limit type: integer responses: '200': content: application/json: example: data: - attributes: SKU: ABC123 currency: USD in_stock: true name: Red T-Shirt price: 19.99 product_id_value: ABC123 - attributes: SKU: DEF456 currency: USD in_stock: false name: Blue Jeans price: 49.99 product_id_value: DEF456 limit: 20 page: 1 total: 2 schema: $ref: '#/components/schemas/ListProductsResponse' description: A paginated list of products. '404': content: application/json: example: detail: error_code: catalogue.not_found message: Catalogue 123 not found in account 890 description: Catalogue not found for the given account. '422': content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' description: Validation Error '429': $ref: '#/components/responses/TooManyRequests' summary: '[BETA] List products' tags: - Catalogues patch: DeleteProductResponse: description: Response model for single product deletion. properties: product_id_value: description: The ID of the deleted product title: Product Id Value type: string status: description: The deletion status title: Status type: string required: - product_id_value - status title: DeleteProductResponse type: object DeleteProductsResponse: description: Response model for deleting multiple products. items: $ref: '#/components/schemas/DeleteProductsResponseItem' title: DeleteProductsResponse type: array DeleteProductsResponseItem: description: Response item for a single product deletion. properties: product_id_value: title: Product Id Value type: string status: title: Status type: string required: - product_id_value - status title: DeleteProductsResponseItem type: object DuplicateRulesRequest: examples: - rule_ids: - 1 - 2 - 3 target_catalogue_ids: - 200 - 201 user_id: 42 properties: rule_ids: items: type: integer title: Rule Ids type: array uniqueItems: true target_catalogue_ids: items: type: integer title: Target Catalogue Ids type: array uniqueItems: true user_id: title: User Id type: integer required: - user_id - target_catalogue_ids - rule_ids title: DuplicateRulesRequest type: object GetCatalogueResponse: properties: additional_sources: anyOf: - items: type: integer type: array - type: 'null' title: Additional Sources catalogue_id: title: Catalogue Id type: integer created_at: title: Created At type: string indexed_at: anyOf: - type: string - type: 'null' title: Indexed At name: title: Name type: string product_id_key: title: Product Id Key type: string products_count: title: Products Count type: integer source: title: Source type: string status: title: Status type: string updated_at: title: Updated At type: string required: - catalogue_id - name - status - product_id_key - created_at - updated_at - indexed_at - source - products_count title: GetCatalogueResponse type: object GetProductResponse: additionalProperties: true title: GetProductResponse type: object HTTPValidationError: properties: detail: items: $ref: '#/components/schemas/ValidationError' title: Detail type: array title: HTTPValidationError type: object ListAttributesResponse: $ref: '#/components/schemas/PaginatedResultWithNext_str_' title: ListAttributesResponse ListCataloguesResponse: $ref: '#/components/schemas/PaginatedResultWithNext_ListCataloguesResponseItem_-Output' title: ListCataloguesResponse ListCataloguesResponseItem-Input: properties: additional_sources: anyOf: - items: type: integer type: array - type: 'null' title: Additional Sources catalogue_id: title: Catalogue Id type: integer channels_count: title: Channels Count type: integer name: title: Name type: string product_id_key: title: Product Id Key type: string role: title: Role type: string status: title: Status type: string used_by: anyOf: - items: type: integer type: array - type: 'null' title: Used By required: - catalogue_id - name - status - product_id_key - role - additional_sources - used_by - channels_count title: ListCataloguesResponseItem type: object ListCataloguesResponseItem-Output: properties: additional_sources: anyOf: - items: type: integer type: array - type: 'null' title: Additional Sources catalogue_id: title: Catalogue Id type: integer channels_count: title: Channels Count type: integer name: title: Name type: string product_id_key: title: Product Id Key type: string role: title: Role type: string status: title: Status type: string used_by: anyOf: - items: type: integer type: array - type: 'null' title: Used By required: - catalogue_id - name - status - product_id_key - role - channels_count title: ListCataloguesResponseItem type: object ListProductsResponse: $ref: '#/components/schemas/PaginatedResultWithNext_ListProductsResponseItem_' title: ListProductsResponse ListProductsResponseItem: properties: attributes: additionalProperties: true title: Attributes type: object product_id_value: title: Product Id Value type: string required: - product_id_value - attributes title: ListProductsResponseItem type: object PaginatedResultWithNext_ListCataloguesResponseItem_-Input: properties: data: items: $ref: '#/components/schemas/ListCataloguesResponseItem-Input' title: Data type: array limit: title: Limit type: integer next: anyOf: - type: string - type: 'null' title: Next page: title: Page type: integer total: title: Total type: integer required: - data - total - page - limit - next title: PaginatedResultWithNext[ListCataloguesResponseItem] type: object PaginatedResultWithNext_ListCataloguesResponseItem_-Output: properties: data: items: $ref: '#/components/schemas/ListCataloguesResponseItem-Output' title: Data type: array limit: title: Limit type: integer next: anyOf: - type: string - type: 'null' title: Next page: title: Page type: integer total: title: Total type: integer required: - data - total - page - limit - next title: PaginatedResultWithNext[ListCataloguesResponseItem] type: object PaginatedResultWithNext_ListProductsResponseItem_: properties: data: items: $ref: '#/components/schemas/ListProductsResponseItem' title: Data type: array limit: title: Limit type: integer next: anyOf: - type: string - type: 'null' title: Next page: title: Page type: integer total: title: Total type: integer required: - data - total - page - limit - next title: PaginatedResultWithNext[ListProductsResponseItem] type: object PaginatedResultWithNext_str_: properties: data: items: type: string title: Data type: array limit: title: Limit type: integer next: anyOf: - type: string - type: 'null' title: Next page: title: Page type: integer total: title: Total type: integer required: - data - total - page - limit - next title: PaginatedResultWithNext[str] type: object RuleDuplicationAttributeResponse: properties: key: description: The identifier of the attribute in the system examples: - price - SRC_123456:quantity title: Key type: string name: description: The name of the attribute examples: - price - quantity title: Name type: string source: description: The ID of the source this attribute is attached to title: Source type: integer required: - name - key - source title: RuleDuplicationAttributeResponse type: object RuleDuplicationErrorResponse: properties: attribute: anyOf: - $ref: '#/components/schemas/RuleDuplicationAttributeResponse' - type: 'null' description: The attribute related to the error, if applicable attributes: anyOf: - items: $ref: '#/components/schemas/RuleDuplicationAttributeResponse' type: array - type: 'null' description: The list of attributes related to the error, if applicable title: Attributes error_code: description: The error code identifying the type of duplication error enum: - rule_duplication.self_duplication - rule_duplication.source_rule.not_found - rule_duplication.validity_period - rule_duplication.referenced_attributes.not_found - rule_duplication.target_attribute.duplicate_new_on_not_new - rule_duplication.target_attribute.duplicate_not_new_on_new - rule_duplication.target_attribute.not_found - rule_duplication.target_attribute.default_rule.already_exists - rule_duplication.target_attribute.default_rule.already_duplicated - rule_duplication.unknown_error - catalogue.not_found title: Error Code type: string message: description: A human-readable message describing the error title: Message type: string required: - error_code - message title: RuleDuplicationErrorResponse type: object RuleDuplicationOperationEntryResponse: properties: errors: anyOf: - items: $ref: '#/components/schemas/RuleDuplicationErrorResponse' type: array - type: 'null' title: Errors new_rule_id: anyOf: - type: integer - type: 'null' title: New Rule Id source_catalogue_id: title: Source Catalogue Id type: integer source_rule_id: title: Source Rule Id type: integer success: title: Success type: boolean target_catalogue_id: title: Target Catalogue Id type: integer warnings: anyOf: - items: $ref: '#/components/schemas/RuleDuplicationErrorResponse' type: array - type: 'null' title: Warnings required: - source_rule_id - source_catalogue_id - target_catalogue_id - success title: RuleDuplicationOperationEntryResponse type: object RuleDuplicationOperationResponse: examples: - created_at: '2026-05-19T09:17:20.989272+00:00' failure_count: 1 operation_id: 019e3f81-3f25-716f-8ee3-b7f651ede48e results: - new_rule_id: 74 source_catalogue_id: 1 source_rule_id: 19 success: true target_catalogue_id: 4 - errors: - error_code: rule_duplication.unknown_error message: 'Failed to duplicate rule 1: Missing required attribute ''quantity''.' source_catalogue_id: 1 source_rule_id: 1 success: false target_catalogue_id: 4 - new_rule_id: 72 source_catalogue_id: 1 source_rule_id: 2 success: true target_catalogue_id: 4 warnings: - message: The rule has a validity period that will not be duplicated. warning_code: rule_duplication.validity_period - new_rule_id: 73 source_catalogue_id: 1 source_rule_id: 3 success: true target_catalogue_id: 4 success_count: 3 total_rules: 4 user_id: 123 properties: created_at: anyOf: - format: date-time type: string - type: 'null' title: Created At failure_count: title: Failure Count type: integer operation_id: title: Operation Id type: string results: items: $ref: '#/components/schemas/RuleDuplicationOperationEntryResponse' title: Results type: array success_count: title: Success Count type: integer total_rules: title: Total Rules type: integer user_id: anyOf: - type: integer - type: 'null' title: User Id required: - operation_id - total_rules - success_count - failure_count - results title: RuleDuplicationOperationResponse type: object UpdateProductRequest: additionalProperties: anyOf: - type: integer - type: number - type: string - type: boolean - type: 'null' title: UpdateProductRequest type: object UpdateProductResponse: title: UpdateProductResponse UpdateProductsRequest: additionalProperties: $ref: '#/components/schemas/UpdateProductsRequestItem' title: UpdateProductsRequest type: object UpdateProductsRequestItem: additionalProperties: anyOf: - type: integer - type: number - type: string - type: boolean - type: 'null' title: UpdateProductsRequestItem type: object UpdateProductsResponse: additionalProperties: $ref: '#/components/schemas/UpdateProductsResponseItem' title: UpdateProductsResponse type: object UpdateProductsResponseItem: properties: errors: anyOf: - items: type: string type: array - type: 'null' title: Errors status: title: Status type: string required: - status title: UpdateProductsResponseItem type: object UpsertProductsRequest: items: additionalProperties: anyOf: - type: integer - type: number - type: string - type: boolean - type: 'null' type: object title: UpsertProductsRequest type: array UpsertProductsResponse: items: $ref: '#/components/schemas/UpsertProductsResponseItem' title: UpsertProductsResponse type: array UpsertProductsResponseItem: properties: errors: anyOf: - items: type: string type: array - type: 'null' title: Errors product_id_value: anyOf: - type: string - type: 'null' title: Product Id Value status: title: Status type: string required: - product_id_value - status - errors title: UpsertProductsResponseItem type: object ValidationError: properties: loc: items: anyOf: - type: string - type: integer title: Location type: array msg: title: Message type: string type: title: Error Type type: string required: - loc - msg - type title: ValidationError type: object description: 'Update the value of some attributes for many products. **Closed Beta – Authorised Users Only** This endpoint is under development and available only to approved beta participants. Contact [our support](mailto:help@lengow.com).' operationId: update_products_public_catalogues__catalogue_id__products_patch parameters: - description: The ID of the catalogue in: path name: catalogue_id required: true schema: description: The ID of the catalogue title: Catalogue Id type: integer - description: The ID of the account in: query name: account_id required: true schema: description: The ID of the account title: Account Id type: integer requestBody: content: application/json: example: product_123: color: red material: cotton size: L product_456: category: clothing price: 29.99 stock: 100 schema: $ref: '#/components/schemas/UpdateProductsRequest' description: 'For each product, specify which attributes to update, - the key of the dictionary must be a valid product_id_value (can be retrieved using /catalogues/{catalogue_id}/products), - the key of the inner dictionary must be an attribute key accepted by the target catalogue (you can retrieve the exact list with /catalogues/{catalogue_id}/attributes), - a request is limited to 10000 product updates at once.' required: true responses: '207': content: application/json: example: product_123: status: updated product_456: errors: - Product 'ABC123' not found in catalogue 123. status: rejected schema: $ref: '#/components/schemas/UpdateProductsResponse' description: The result of the update operation for each product. '404': content: application/json: example: detail: error_code: catalogue.not_found message: Catalogue 123 not found in account 456 description: Catalogue not found '409': content: application/json: example: detail: error_code: catalogue.draft.forbidden_operation message: Cannot update products in a draft catalogue. description: Catalogue is in draft status, operation forbidden '422': content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' description: Validation Error '429': $ref: '#/components/responses/TooManyRequests' summary: '[BETA] Update batch of products' tags: - Catalogues post: DeleteProductResponse: description: Response model for single product deletion. properties: product_id_value: description: The ID of the deleted product title: Product Id Value type: string status: description: The deletion status title: Status type: string required: - product_id_value - status title: DeleteProductResponse type: object DeleteProductsResponse: description: Response model for deleting multiple products. items: $ref: '#/components/schemas/DeleteProductsResponseItem' title: DeleteProductsResponse type: array DeleteProductsResponseItem: description: Response item for a single product deletion. properties: product_id_value: title: Product Id Value type: string status: title: Status type: string required: - product_id_value - status title: DeleteProductsResponseItem type: object DuplicateRulesRequest: examples: - rule_ids: - 1 - 2 - 3 target_catalogue_ids: - 200 - 201 user_id: 42 properties: rule_ids: items: type: integer title: Rule Ids type: array uniqueItems: true target_catalogue_ids: items: type: integer title: Target Catalogue Ids type: array uniqueItems: true user_id: title: User Id type: integer required: - user_id - target_catalogue_ids - rule_ids title: DuplicateRulesRequest type: object GetCatalogueResponse: properties: additional_sources: anyOf: - items: type: integer type: array - type: 'null' title: Additional Sources catalogue_id: title: Catalogue Id type: integer created_at: title: Created At type: string indexed_at: anyOf: - type: string - type: 'null' title: Indexed At name: title: Name type: string product_id_key: title: Product Id Key type: string products_count: title: Products Count type: integer source: title: Source type: string status: title: Status type: string updated_at: title: Updated At type: string required: - catalogue_id - name - status - product_id_key - created_at - updated_at - indexed_at - source - products_count title: GetCatalogueResponse type: object GetProductResponse: additionalProperties: true title: GetProductResponse type: object HTTPValidationError: properties: detail: items: $ref: '#/components/schemas/ValidationError' title: Detail type: array title: HTTPValidationError type: object ListAttributesResponse: $ref: '#/components/schemas/PaginatedResultWithNext_str_' title: ListAttributesResponse ListCataloguesResponse: $ref: '#/components/schemas/PaginatedResultWithNext_ListCataloguesResponseItem_-Output' title: ListCataloguesResponse ListCataloguesResponseItem-Input: properties: additional_sources: anyOf: - items: type: integer type: array - type: 'null' title: Additional Sources catalogue_id: title: Catalogue Id type: integer channels_count: title: Channels Count type: integer name: title: Name type: string product_id_key: title: Product Id Key type: string role: title: Role type: string status: title: Status type: string used_by: anyOf: - items: type: integer type: array - type: 'null' title: Used By required: - catalogue_id - name - status - product_id_key - role - additional_sources - used_by - channels_count title: ListCataloguesResponseItem type: object ListCataloguesResponseItem-Output: properties: additional_sources: anyOf: - items: type: integer type: array - type: 'null' title: Additional Sources catalogue_id: title: Catalogue Id type: integer channels_count: title: Channels Count type: integer name: title: Name type: string product_id_key: title: Product Id Key type: string role: title: Role type: string status: title: Status type: string used_by: anyOf: - items: type: integer type: array - type: 'null' title: Used By required: - catalogue_id - name - status - product_id_key - role - channels_count title: ListCataloguesResponseItem type: object ListProductsResponse: $ref: '#/components/schemas/PaginatedResultWithNext_ListProductsResponseItem_' title: ListProductsResponse ListProductsResponseItem: properties: attributes: additionalProperties: true title: Attributes type: object product_id_value: title: Product Id Value type: string required: - product_id_value - attributes title: ListProductsResponseItem type: object PaginatedResultWithNext_ListCataloguesResponseItem_-Input: properties: data: items: $ref: '#/components/schemas/ListCataloguesResponseItem-Input' title: Data type: array limit: title: Limit type: integer next: anyOf: - type: string - type: 'null' title: Next page: title: Page type: integer total: title: Total type: integer required: - data - total - page - limit - next title: PaginatedResultWithNext[ListCataloguesResponseItem] type: object PaginatedResultWithNext_ListCataloguesResponseItem_-Output: properties: data: items: $ref: '#/components/schemas/ListCataloguesResponseItem-Output' title: Data type: array limit: title: Limit type: integer next: anyOf: - type: string - type: 'null' title: Next page: title: Page type: integer total: title: Total type: integer required: - data - total - page - limit - next title: PaginatedResultWithNext[ListCataloguesResponseItem] type: object PaginatedResultWithNext_ListProductsResponseItem_: properties: data: items: $ref: '#/components/schemas/ListProductsResponseItem' title: Data type: array limit: title: Limit type: integer next: anyOf: - type: string - type: 'null' title: Next page: title: Page type: integer total: title: Total type: integer required: - data - total - page - limit - next title: PaginatedResultWithNext[ListProductsResponseItem] type: object PaginatedResultWithNext_str_: properties: data: items: type: string title: Data type: array limit: title: Limit type: integer next: anyOf: - type: string - type: 'null' title: Next page: title: Page type: integer total: title: Total type: integer required: - data - total - page - limit - next title: PaginatedResultWithNext[str] type: object RuleDuplicationAttributeResponse: properties: key: description: The identifier of the attribute in the system examples: - price - SRC_123456:quantity title: Key type: string name: description: The name of the attribute examples: - price - quantity title: Name type: string source: description: The ID of the source this attribute is attached to title: Source type: integer required: - name - key - source title: RuleDuplicationAttributeResponse type: object RuleDuplicationErrorResponse: properties: attribute: anyOf: - $ref: '#/components/schemas/RuleDuplicationAttributeResponse' - type: 'null' description: The attribute related to the error, if applicable attributes: anyOf: - items: $ref: '#/components/schemas/RuleDuplicationAttributeResponse' type: array - type: 'null' description: The list of attributes related to the error, if applicable title: Attributes error_code: description: The error code identifying the type of duplication error enum: - rule_duplication.self_duplication - rule_duplication.source_rule.not_found - rule_duplication.validity_period - rule_duplication.referenced_attributes.not_found - rule_duplication.target_attribute.duplicate_new_on_not_new - rule_duplication.target_attribute.duplicate_not_new_on_new - rule_duplication.target_attribute.not_found - rule_duplication.target_attribute.default_rule.already_exists - rule_duplication.target_attribute.default_rule.already_duplicated - rule_duplication.unknown_error - catalogue.not_found title: Error Code type: string message: description: A human-readable message describing the error title: Message type: string required: - error_code - message title: RuleDuplicationErrorResponse type: object RuleDuplicationOperationEntryResponse: properties: errors: anyOf: - items: $ref: '#/components/schemas/RuleDuplicationErrorResponse' type: array - type: 'null' title: Errors new_rule_id: anyOf: - type: integer - type: 'null' title: New Rule Id source_catalogue_id: title: Source Catalogue Id type: integer source_rule_id: title: Source Rule Id type: integer success: title: Success type: boolean target_catalogue_id: title: Target Catalogue Id type: integer warnings: anyOf: - items: $ref: '#/components/schemas/RuleDuplicationErrorResponse' type: array - type: 'null' title: Warnings required: - source_rule_id - source_catalogue_id - target_catalogue_id - success title: RuleDuplicationOperationEntryResponse type: object RuleDuplicationOperationResponse: examples: - created_at: '2026-05-19T09:17:20.989272+00:00' failure_count: 1 operation_id: 019e3f81-3f25-716f-8ee3-b7f651ede48e results: - new_rule_id: 74 source_catalogue_id: 1 source_rule_id: 19 success: true target_catalogue_id: 4 - errors: - error_code: rule_duplication.unknown_error message: 'Failed to duplicate rule 1: Missing required attribute ''quantity''.' source_catalogue_id: 1 source_rule_id: 1 success: false target_catalogue_id: 4 - new_rule_id: 72 source_catalogue_id: 1 source_rule_id: 2 success: true target_catalogue_id: 4 warnings: - message: The rule has a validity period that will not be duplicated. warning_code: rule_duplication.validity_period - new_rule_id: 73 source_catalogue_id: 1 source_rule_id: 3 success: true target_catalogue_id: 4 success_count: 3 total_rules: 4 user_id: 123 properties: created_at: anyOf: - format: date-time type: string - type: 'null' title: Created At failure_count: title: Failure Count type: integer operation_id: title: Operation Id type: string results: items: $ref: '#/components/schemas/RuleDuplicationOperationEntryResponse' title: Results type: array success_count: title: Success Count type: integer total_rules: title: Total Rules type: integer user_id: anyOf: - type: integer - type: 'null' title: User Id required: - operation_id - total_rules - success_count - failure_count - results title: RuleDuplicationOperationResponse type: object UpdateProductRequest: additionalProperties: anyOf: - type: integer - type: number - type: string - type: boolean - type: 'null' title: UpdateProductRequest type: object UpdateProductResponse: title: UpdateProductResponse UpdateProductsRequest: additionalProperties: $ref: '#/components/schemas/UpdateProductsRequestItem' title: UpdateProductsRequest type: object UpdateProductsRequestItem: additionalProperties: anyOf: - type: integer - type: number - type: string - type: boolean - type: 'null' title: UpdateProductsRequestItem type: object UpdateProductsResponse: additionalProperties: $ref: '#/components/schemas/UpdateProductsResponseItem' title: UpdateProductsResponse type: object UpdateProductsResponseItem: properties: errors: anyOf: - items: type: string type: array - type: 'null' title: Errors status: title: Status type: string required: - status title: UpdateProductsResponseItem type: object UpsertProductsRequest: items: additionalProperties: anyOf: - type: integer - type: number - type: string - type: boolean - type: 'null' type: object title: UpsertProductsRequest type: array UpsertProductsResponse: items: $ref: '#/components/schemas/UpsertProductsResponseItem' title: UpsertProductsResponse type: array UpsertProductsResponseItem: properties: errors: anyOf: - items: type: string type: array - type: 'null' title: Errors product_id_value: anyOf: - type: string - type: 'null' title: Product Id Value status: title: Status type: string required: - product_id_value - status - errors title: UpsertProductsResponseItem type: object ValidationError: properties: loc: items: anyOf: - type: string - type: integer title: Location type: array msg: title: Message type: string type: title: Error Type type: string required: - loc - msg - type title: ValidationError type: object description: 'Create or replace products in the catalogue. This update call is a purge and replace call, meaning the full product will get overwritten with the new payload. Any attribute not included in the payload will be removed (its value will be cleared). **Closed Beta – Authorised Users Only** This endpoint is under development and available only to approved beta participants. Contact [our support](mailto:help@lengow.com).' operationId: upsert_products_public_catalogues__catalogue_id__products_post parameters: - description: The ID of the catalogue in: path name: catalogue_id required: true schema: description: The ID of the catalogue title: Catalogue Id type: integer - description: The ID of the account in: query name: account_id required: true schema: description: The ID of the account title: Account Id type: integer requestBody: content: application/json: example: - color: red id: product_123 name: T-shirt price: 19.99 size: L - color: blue id: product_456 name: Jeans price: 49.99 size: '32' schema: $ref: '#/components/schemas/UpsertProductsRequest' description: 'For each product, specify its new content (full replacement), - the keys of each item must be an attribute defined in the catalogue settings (can be retrieved using /catalogues/{catalogue_id}/attributes), - the product_id attribute must be specified on each item, - other attributes not included in the request will be removed from the product, - if several items specify the same product_id, they will be rejected, - a request is limited to 10000 items at once.' required: true responses: '207': content: application/json: example: - product_id_value: product_123 status: created - product_id_value: product_456 status: updated - errors: - 'Unknown attributes for catalogue schema: qrice, ID.' product_id_value: product_789 status: rejected schema: $ref: '#/components/schemas/UpsertProductsResponse' description: A multi-status response with results for each product. '404': content: application/json: example: detail: error_code: catalogue.not_found message: Catalogue 123 not found in account 890 description: Catalogue not found in the specified account. '409': content: application/json: example: detail: error_code: catalogue.draft.forbidden_operation message: Cannot perform product operations on draft catalogue 123. description: Catalogue is in draft status; operation forbidden. '422': content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' description: Validation Error '429': $ref: '#/components/responses/TooManyRequests' summary: '[BETA] Create or replace products' tags: - Catalogues /v1.0/catalogues/{catalogue_id}/products/{product_id_value}: delete: DeleteProductResponse: description: Response model for single product deletion. properties: product_id_value: description: The ID of the deleted product title: Product Id Value type: string status: description: The deletion status title: Status type: string required: - product_id_value - status title: DeleteProductResponse type: object DeleteProductsResponse: description: Response model for deleting multiple products. items: $ref: '#/components/schemas/DeleteProductsResponseItem' title: DeleteProductsResponse type: array DeleteProductsResponseItem: description: Response item for a single product deletion. properties: product_id_value: title: Product Id Value type: string status: title: Status type: string required: - product_id_value - status title: DeleteProductsResponseItem type: object DuplicateRulesRequest: examples: - rule_ids: - 1 - 2 - 3 target_catalogue_ids: - 200 - 201 user_id: 42 properties: rule_ids: items: type: integer title: Rule Ids type: array uniqueItems: true target_catalogue_ids: items: type: integer title: Target Catalogue Ids type: array uniqueItems: true user_id: title: User Id type: integer required: - user_id - target_catalogue_ids - rule_ids title: DuplicateRulesRequest type: object GetCatalogueResponse: properties: additional_sources: anyOf: - items: type: integer type: array - type: 'null' title: Additional Sources catalogue_id: title: Catalogue Id type: integer created_at: title: Created At type: string indexed_at: anyOf: - type: string - type: 'null' title: Indexed At name: title: Name type: string product_id_key: title: Product Id Key type: string products_count: title: Products Count type: integer source: title: Source type: string status: title: Status type: string updated_at: title: Updated At type: string required: - catalogue_id - name - status - product_id_key - created_at - updated_at - indexed_at - source - products_count title: GetCatalogueResponse type: object GetProductResponse: additionalProperties: true title: GetProductResponse type: object HTTPValidationError: properties: detail: items: $ref: '#/components/schemas/ValidationError' title: Detail type: array title: HTTPValidationError type: object ListAttributesResponse: $ref: '#/components/schemas/PaginatedResultWithNext_str_' title: ListAttributesResponse ListCataloguesResponse: $ref: '#/components/schemas/PaginatedResultWithNext_ListCataloguesResponseItem_-Output' title: ListCataloguesResponse ListCataloguesResponseItem-Input: properties: additional_sources: anyOf: - items: type: integer type: array - type: 'null' title: Additional Sources catalogue_id: title: Catalogue Id type: integer channels_count: title: Channels Count type: integer name: title: Name type: string product_id_key: title: Product Id Key type: string role: title: Role type: string status: title: Status type: string used_by: anyOf: - items: type: integer type: array - type: 'null' title: Used By required: - catalogue_id - name - status - product_id_key - role - additional_sources - used_by - channels_count title: ListCataloguesResponseItem type: object ListCataloguesResponseItem-Output: properties: additional_sources: anyOf: - items: type: integer type: array - type: 'null' title: Additional Sources catalogue_id: title: Catalogue Id type: integer channels_count: title: Channels Count type: integer name: title: Name type: string product_id_key: title: Product Id Key type: string role: title: Role type: string status: title: Status type: string used_by: anyOf: - items: type: integer type: array - type: 'null' title: Used By required: - catalogue_id - name - status - product_id_key - role - channels_count title: ListCataloguesResponseItem type: object ListProductsResponse: $ref: '#/components/schemas/PaginatedResultWithNext_ListProductsResponseItem_' title: ListProductsResponse ListProductsResponseItem: properties: attributes: additionalProperties: true title: Attributes type: object product_id_value: title: Product Id Value type: string required: - product_id_value - attributes title: ListProductsResponseItem type: object PaginatedResultWithNext_ListCataloguesResponseItem_-Input: properties: data: items: $ref: '#/components/schemas/ListCataloguesResponseItem-Input' title: Data type: array limit: title: Limit type: integer next: anyOf: - type: string - type: 'null' title: Next page: title: Page type: integer total: title: Total type: integer required: - data - total - page - limit - next title: PaginatedResultWithNext[ListCataloguesResponseItem] type: object PaginatedResultWithNext_ListCataloguesResponseItem_-Output: properties: data: items: $ref: '#/components/schemas/ListCataloguesResponseItem-Output' title: Data type: array limit: title: Limit type: integer next: anyOf: - type: string - type: 'null' title: Next page: title: Page type: integer total: title: Total type: integer required: - data - total - page - limit - next title: PaginatedResultWithNext[ListCataloguesResponseItem] type: object PaginatedResultWithNext_ListProductsResponseItem_: properties: data: items: $ref: '#/components/schemas/ListProductsResponseItem' title: Data type: array limit: title: Limit type: integer next: anyOf: - type: string - type: 'null' title: Next page: title: Page type: integer total: title: Total type: integer required: - data - total - page - limit - next title: PaginatedResultWithNext[ListProductsResponseItem] type: object PaginatedResultWithNext_str_: properties: data: items: type: string title: Data type: array limit: title: Limit type: integer next: anyOf: - type: string - type: 'null' title: Next page: title: Page type: integer total: title: Total type: integer required: - data - total - page - limit - next title: PaginatedResultWithNext[str] type: object RuleDuplicationAttributeResponse: properties: key: description: The identifier of the attribute in the system examples: - price - SRC_123456:quantity title: Key type: string name: description: The name of the attribute examples: - price - quantity title: Name type: string source: description: The ID of the source this attribute is attached to title: Source type: integer required: - name - key - source title: RuleDuplicationAttributeResponse type: object RuleDuplicationErrorResponse: properties: attribute: anyOf: - $ref: '#/components/schemas/RuleDuplicationAttributeResponse' - type: 'null' description: The attribute related to the error, if applicable attributes: anyOf: - items: $ref: '#/components/schemas/RuleDuplicationAttributeResponse' type: array - type: 'null' description: The list of attributes related to the error, if applicable title: Attributes error_code: description: The error code identifying the type of duplication error enum: - rule_duplication.self_duplication - rule_duplication.source_rule.not_found - rule_duplication.validity_period - rule_duplication.referenced_attributes.not_found - rule_duplication.target_attribute.duplicate_new_on_not_new - rule_duplication.target_attribute.duplicate_not_new_on_new - rule_duplication.target_attribute.not_found - rule_duplication.target_attribute.default_rule.already_exists - rule_duplication.target_attribute.default_rule.already_duplicated - rule_duplication.unknown_error - catalogue.not_found title: Error Code type: string message: description: A human-readable message describing the error title: Message type: string required: - error_code - message title: RuleDuplicationErrorResponse type: object RuleDuplicationOperationEntryResponse: properties: errors: anyOf: - items: $ref: '#/components/schemas/RuleDuplicationErrorResponse' type: array - type: 'null' title: Errors new_rule_id: anyOf: - type: integer - type: 'null' title: New Rule Id source_catalogue_id: title: Source Catalogue Id type: integer source_rule_id: title: Source Rule Id type: integer success: title: Success type: boolean target_catalogue_id: title: Target Catalogue Id type: integer warnings: anyOf: - items: $ref: '#/components/schemas/RuleDuplicationErrorResponse' type: array - type: 'null' title: Warnings required: - source_rule_id - source_catalogue_id - target_catalogue_id - success title: RuleDuplicationOperationEntryResponse type: object RuleDuplicationOperationResponse: examples: - created_at: '2026-05-19T09:17:20.989272+00:00' failure_count: 1 operation_id: 019e3f81-3f25-716f-8ee3-b7f651ede48e results: - new_rule_id: 74 source_catalogue_id: 1 source_rule_id: 19 success: true target_catalogue_id: 4 - errors: - error_code: rule_duplication.unknown_error message: 'Failed to duplicate rule 1: Missing required attribute ''quantity''.' source_catalogue_id: 1 source_rule_id: 1 success: false target_catalogue_id: 4 - new_rule_id: 72 source_catalogue_id: 1 source_rule_id: 2 success: true target_catalogue_id: 4 warnings: - message: The rule has a validity period that will not be duplicated. warning_code: rule_duplication.validity_period - new_rule_id: 73 source_catalogue_id: 1 source_rule_id: 3 success: true target_catalogue_id: 4 success_count: 3 total_rules: 4 user_id: 123 properties: created_at: anyOf: - format: date-time type: string - type: 'null' title: Created At failure_count: title: Failure Count type: integer operation_id: title: Operation Id type: string results: items: $ref: '#/components/schemas/RuleDuplicationOperationEntryResponse' title: Results type: array success_count: title: Success Count type: integer total_rules: title: Total Rules type: integer user_id: anyOf: - type: integer - type: 'null' title: User Id required: - operation_id - total_rules - success_count - failure_count - results title: RuleDuplicationOperationResponse type: object UpdateProductRequest: additionalProperties: anyOf: - type: integer - type: number - type: string - type: boolean - type: 'null' title: UpdateProductRequest type: object UpdateProductResponse: title: UpdateProductResponse UpdateProductsRequest: additionalProperties: $ref: '#/components/schemas/UpdateProductsRequestItem' title: UpdateProductsRequest type: object UpdateProductsRequestItem: additionalProperties: anyOf: - type: integer - type: number - type: string - type: boolean - type: 'null' title: UpdateProductsRequestItem type: object UpdateProductsResponse: additionalProperties: $ref: '#/components/schemas/UpdateProductsResponseItem' title: UpdateProductsResponse type: object UpdateProductsResponseItem: properties: errors: anyOf: - items: type: string type: array - type: 'null' title: Errors status: title: Status type: string required: - status title: UpdateProductsResponseItem type: object UpsertProductsRequest: items: additionalProperties: anyOf: - type: integer - type: number - type: string - type: boolean - type: 'null' type: object title: UpsertProductsRequest type: array UpsertProductsResponse: items: $ref: '#/components/schemas/UpsertProductsResponseItem' title: UpsertProductsResponse type: array UpsertProductsResponseItem: properties: errors: anyOf: - items: type: string type: array - type: 'null' title: Errors product_id_value: anyOf: - type: string - type: 'null' title: Product Id Value status: title: Status type: string required: - product_id_value - status - errors title: UpsertProductsResponseItem type: object ValidationError: properties: loc: items: anyOf: - type: string - type: integer title: Location type: array msg: title: Message type: string type: title: Error Type type: string required: - loc - msg - type title: ValidationError type: object description: 'Delete a single product from the catalogue. To delete a product, you must use the product_id_value (the value of the product identifier mapped in the catalogue settings). **Closed Beta – Authorised Users Only** This endpoint is under development and available only to approved beta participants. Contact [our support](mailto:help@lengow.com).' operationId: delete_product_public_catalogues__catalogue_id__products__product_id_value__delete parameters: - description: The ID of the catalogue in: path name: catalogue_id required: true schema: description: The ID of the catalogue title: Catalogue Id type: integer - description: The ID of the product to delete in: path name: product_id_value required: true schema: description: The ID of the product to delete title: Product Id Value type: string - description: The ID of the account in: query name: account_id required: true schema: description: The ID of the account title: Account Id type: integer responses: '200': content: application/json: example: product_id_value: product_123 status: deleted schema: $ref: '#/components/schemas/DeleteProductResponse' description: Product successfully deleted. '404': content: application/json: examples: catalogue_not_found: summary: Catalogue not found value: detail: error_code: catalogue.not_found message: Catalogue 123 not found in account 456 product_not_found: summary: Product not found value: detail: error_code: product.not_found message: Product 'ABC123' not found in catalogue 123 description: Catalogue or product not found. '409': content: application/json: example: detail: error_code: catalogue.draft.forbidden_operation message: Cannot perform product operations on draft catalogue 123. description: Catalogue is in draft status; operation forbidden. '422': content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' description: Validation Error '429': $ref: '#/components/responses/TooManyRequests' summary: '[BETA] Delete a product' tags: - Catalogues get: DeleteProductResponse: description: Response model for single product deletion. properties: product_id_value: description: The ID of the deleted product title: Product Id Value type: string status: description: The deletion status title: Status type: string required: - product_id_value - status title: DeleteProductResponse type: object DeleteProductsResponse: description: Response model for deleting multiple products. items: $ref: '#/components/schemas/DeleteProductsResponseItem' title: DeleteProductsResponse type: array DeleteProductsResponseItem: description: Response item for a single product deletion. properties: product_id_value: title: Product Id Value type: string status: title: Status type: string required: - product_id_value - status title: DeleteProductsResponseItem type: object DuplicateRulesRequest: examples: - rule_ids: - 1 - 2 - 3 target_catalogue_ids: - 200 - 201 user_id: 42 properties: rule_ids: items: type: integer title: Rule Ids type: array uniqueItems: true target_catalogue_ids: items: type: integer title: Target Catalogue Ids type: array uniqueItems: true user_id: title: User Id type: integer required: - user_id - target_catalogue_ids - rule_ids title: DuplicateRulesRequest type: object GetCatalogueResponse: properties: additional_sources: anyOf: - items: type: integer type: array - type: 'null' title: Additional Sources catalogue_id: title: Catalogue Id type: integer created_at: title: Created At type: string indexed_at: anyOf: - type: string - type: 'null' title: Indexed At name: title: Name type: string product_id_key: title: Product Id Key type: string products_count: title: Products Count type: integer source: title: Source type: string status: title: Status type: string updated_at: title: Updated At type: string required: - catalogue_id - name - status - product_id_key - created_at - updated_at - indexed_at - source - products_count title: GetCatalogueResponse type: object GetProductResponse: additionalProperties: true title: GetProductResponse type: object HTTPValidationError: properties: detail: items: $ref: '#/components/schemas/ValidationError' title: Detail type: array title: HTTPValidationError type: object ListAttributesResponse: $ref: '#/components/schemas/PaginatedResultWithNext_str_' title: ListAttributesResponse ListCataloguesResponse: $ref: '#/components/schemas/PaginatedResultWithNext_ListCataloguesResponseItem_-Output' title: ListCataloguesResponse ListCataloguesResponseItem-Input: properties: additional_sources: anyOf: - items: type: integer type: array - type: 'null' title: Additional Sources catalogue_id: title: Catalogue Id type: integer channels_count: title: Channels Count type: integer name: title: Name type: string product_id_key: title: Product Id Key type: string role: title: Role type: string status: title: Status type: string used_by: anyOf: - items: type: integer type: array - type: 'null' title: Used By required: - catalogue_id - name - status - product_id_key - role - additional_sources - used_by - channels_count title: ListCataloguesResponseItem type: object ListCataloguesResponseItem-Output: properties: additional_sources: anyOf: - items: type: integer type: array - type: 'null' title: Additional Sources catalogue_id: title: Catalogue Id type: integer channels_count: title: Channels Count type: integer name: title: Name type: string product_id_key: title: Product Id Key type: string role: title: Role type: string status: title: Status type: string used_by: anyOf: - items: type: integer type: array - type: 'null' title: Used By required: - catalogue_id - name - status - product_id_key - role - channels_count title: ListCataloguesResponseItem type: object ListProductsResponse: $ref: '#/components/schemas/PaginatedResultWithNext_ListProductsResponseItem_' title: ListProductsResponse ListProductsResponseItem: properties: attributes: additionalProperties: true title: Attributes type: object product_id_value: title: Product Id Value type: string required: - product_id_value - attributes title: ListProductsResponseItem type: object PaginatedResultWithNext_ListCataloguesResponseItem_-Input: properties: data: items: $ref: '#/components/schemas/ListCataloguesResponseItem-Input' title: Data type: array limit: title: Limit type: integer next: anyOf: - type: string - type: 'null' title: Next page: title: Page type: integer total: title: Total type: integer required: - data - total - page - limit - next title: PaginatedResultWithNext[ListCataloguesResponseItem] type: object PaginatedResultWithNext_ListCataloguesResponseItem_-Output: properties: data: items: $ref: '#/components/schemas/ListCataloguesResponseItem-Output' title: Data type: array limit: title: Limit type: integer next: anyOf: - type: string - type: 'null' title: Next page: title: Page type: integer total: title: Total type: integer required: - data - total - page - limit - next title: PaginatedResultWithNext[ListCataloguesResponseItem] type: object PaginatedResultWithNext_ListProductsResponseItem_: properties: data: items: $ref: '#/components/schemas/ListProductsResponseItem' title: Data type: array limit: title: Limit type: integer next: anyOf: - type: string - type: 'null' title: Next page: title: Page type: integer total: title: Total type: integer required: - data - total - page - limit - next title: PaginatedResultWithNext[ListProductsResponseItem] type: object PaginatedResultWithNext_str_: properties: data: items: type: string title: Data type: array limit: title: Limit type: integer next: anyOf: - type: string - type: 'null' title: Next page: title: Page type: integer total: title: Total type: integer required: - data - total - page - limit - next title: PaginatedResultWithNext[str] type: object RuleDuplicationAttributeResponse: properties: key: description: The identifier of the attribute in the system examples: - price - SRC_123456:quantity title: Key type: string name: description: The name of the attribute examples: - price - quantity title: Name type: string source: description: The ID of the source this attribute is attached to title: Source type: integer required: - name - key - source title: RuleDuplicationAttributeResponse type: object RuleDuplicationErrorResponse: properties: attribute: anyOf: - $ref: '#/components/schemas/RuleDuplicationAttributeResponse' - type: 'null' description: The attribute related to the error, if applicable attributes: anyOf: - items: $ref: '#/components/schemas/RuleDuplicationAttributeResponse' type: array - type: 'null' description: The list of attributes related to the error, if applicable title: Attributes error_code: description: The error code identifying the type of duplication error enum: - rule_duplication.self_duplication - rule_duplication.source_rule.not_found - rule_duplication.validity_period - rule_duplication.referenced_attributes.not_found - rule_duplication.target_attribute.duplicate_new_on_not_new - rule_duplication.target_attribute.duplicate_not_new_on_new - rule_duplication.target_attribute.not_found - rule_duplication.target_attribute.default_rule.already_exists - rule_duplication.target_attribute.default_rule.already_duplicated - rule_duplication.unknown_error - catalogue.not_found title: Error Code type: string message: description: A human-readable message describing the error title: Message type: string required: - error_code - message title: RuleDuplicationErrorResponse type: object RuleDuplicationOperationEntryResponse: properties: errors: anyOf: - items: $ref: '#/components/schemas/RuleDuplicationErrorResponse' type: array - type: 'null' title: Errors new_rule_id: anyOf: - type: integer - type: 'null' title: New Rule Id source_catalogue_id: title: Source Catalogue Id type: integer source_rule_id: title: Source Rule Id type: integer success: title: Success type: boolean target_catalogue_id: title: Target Catalogue Id type: integer warnings: anyOf: - items: $ref: '#/components/schemas/RuleDuplicationErrorResponse' type: array - type: 'null' title: Warnings required: - source_rule_id - source_catalogue_id - target_catalogue_id - success title: RuleDuplicationOperationEntryResponse type: object RuleDuplicationOperationResponse: examples: - created_at: '2026-05-19T09:17:20.989272+00:00' failure_count: 1 operation_id: 019e3f81-3f25-716f-8ee3-b7f651ede48e results: - new_rule_id: 74 source_catalogue_id: 1 source_rule_id: 19 success: true target_catalogue_id: 4 - errors: - error_code: rule_duplication.unknown_error message: 'Failed to duplicate rule 1: Missing required attribute ''quantity''.' source_catalogue_id: 1 source_rule_id: 1 success: false target_catalogue_id: 4 - new_rule_id: 72 source_catalogue_id: 1 source_rule_id: 2 success: true target_catalogue_id: 4 warnings: - message: The rule has a validity period that will not be duplicated. warning_code: rule_duplication.validity_period - new_rule_id: 73 source_catalogue_id: 1 source_rule_id: 3 success: true target_catalogue_id: 4 success_count: 3 total_rules: 4 user_id: 123 properties: created_at: anyOf: - format: date-time type: string - type: 'null' title: Created At failure_count: title: Failure Count type: integer operation_id: title: Operation Id type: string results: items: $ref: '#/components/schemas/RuleDuplicationOperationEntryResponse' title: Results type: array success_count: title: Success Count type: integer total_rules: title: Total Rules type: integer user_id: anyOf: - type: integer - type: 'null' title: User Id required: - operation_id - total_rules - success_count - failure_count - results title: RuleDuplicationOperationResponse type: object UpdateProductRequest: additionalProperties: anyOf: - type: integer - type: number - type: string - type: boolean - type: 'null' title: UpdateProductRequest type: object UpdateProductResponse: title: UpdateProductResponse UpdateProductsRequest: additionalProperties: $ref: '#/components/schemas/UpdateProductsRequestItem' title: UpdateProductsRequest type: object UpdateProductsRequestItem: additionalProperties: anyOf: - type: integer - type: number - type: string - type: boolean - type: 'null' title: UpdateProductsRequestItem type: object UpdateProductsResponse: additionalProperties: $ref: '#/components/schemas/UpdateProductsResponseItem' title: UpdateProductsResponse type: object UpdateProductsResponseItem: properties: errors: anyOf: - items: type: string type: array - type: 'null' title: Errors status: title: Status type: string required: - status title: UpdateProductsResponseItem type: object UpsertProductsRequest: items: additionalProperties: anyOf: - type: integer - type: number - type: string - type: boolean - type: 'null' type: object title: UpsertProductsRequest type: array UpsertProductsResponse: items: $ref: '#/components/schemas/UpsertProductsResponseItem' title: UpsertProductsResponse type: array UpsertProductsResponseItem: properties: errors: anyOf: - items: type: string type: array - type: 'null' title: Errors product_id_value: anyOf: - type: string - type: 'null' title: Product Id Value status: title: Status type: string required: - product_id_value - status - errors title: UpsertProductsResponseItem type: object ValidationError: properties: loc: items: anyOf: - type: string - type: integer title: Location type: array msg: title: Message type: string type: title: Error Type type: string required: - loc - msg - type title: ValidationError type: object description: 'Retrieve a specific product by its ID. To get a product, you must use the product_id_key (the product identifier mapped in the catalogue settings). The product_id_key is returned in the JSON response of the Get Catalogue ID endpoint. **Closed Beta – Authorised Users Only** This endpoint is under development and available only to approved beta participants. Contact [our support](mailto:help@lengow.com).' operationId: get_product_public_catalogues__catalogue_id__products__product_id_value__get parameters: - description: The ID of the catalogue in: path name: catalogue_id required: true schema: description: The ID of the catalogue title: Catalogue Id type: integer - description: The ID of the product to retrieve in: path name: product_id_value required: true schema: description: The ID of the product to retrieve title: Product Id Value type: string - description: The ID of the account in: query name: account_id required: true schema: description: The ID of the account title: Account Id type: integer responses: '200': content: application/json: example: SKU: ABC123 currency: USD in_stock: true name: Red T-Shirt price: 19.99 schema: $ref: '#/components/schemas/GetProductResponse' description: Product retrieved successfully. '404': content: application/json: examples: catalogue_not_found: summary: Catalogue not found value: detail: error_code: catalogue.not_found message: Catalogue 123 not found in account 456 product_not_found: summary: Product not found value: detail: error_code: product.not_found message: Product 'ABC123' not found in catalogue 123 description: Catalogue or product not found '422': content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' description: Validation Error '429': $ref: '#/components/responses/TooManyRequests' summary: '[BETA] Get product' tags: - Catalogues patch: DeleteProductResponse: description: Response model for single product deletion. properties: product_id_value: description: The ID of the deleted product title: Product Id Value type: string status: description: The deletion status title: Status type: string required: - product_id_value - status title: DeleteProductResponse type: object DeleteProductsResponse: description: Response model for deleting multiple products. items: $ref: '#/components/schemas/DeleteProductsResponseItem' title: DeleteProductsResponse type: array DeleteProductsResponseItem: description: Response item for a single product deletion. properties: product_id_value: title: Product Id Value type: string status: title: Status type: string required: - product_id_value - status title: DeleteProductsResponseItem type: object DuplicateRulesRequest: examples: - rule_ids: - 1 - 2 - 3 target_catalogue_ids: - 200 - 201 user_id: 42 properties: rule_ids: items: type: integer title: Rule Ids type: array uniqueItems: true target_catalogue_ids: items: type: integer title: Target Catalogue Ids type: array uniqueItems: true user_id: title: User Id type: integer required: - user_id - target_catalogue_ids - rule_ids title: DuplicateRulesRequest type: object GetCatalogueResponse: properties: additional_sources: anyOf: - items: type: integer type: array - type: 'null' title: Additional Sources catalogue_id: title: Catalogue Id type: integer created_at: title: Created At type: string indexed_at: anyOf: - type: string - type: 'null' title: Indexed At name: title: Name type: string product_id_key: title: Product Id Key type: string products_count: title: Products Count type: integer source: title: Source type: string status: title: Status type: string updated_at: title: Updated At type: string required: - catalogue_id - name - status - product_id_key - created_at - updated_at - indexed_at - source - products_count title: GetCatalogueResponse type: object GetProductResponse: additionalProperties: true title: GetProductResponse type: object HTTPValidationError: properties: detail: items: $ref: '#/components/schemas/ValidationError' title: Detail type: array title: HTTPValidationError type: object ListAttributesResponse: $ref: '#/components/schemas/PaginatedResultWithNext_str_' title: ListAttributesResponse ListCataloguesResponse: $ref: '#/components/schemas/PaginatedResultWithNext_ListCataloguesResponseItem_-Output' title: ListCataloguesResponse ListCataloguesResponseItem-Input: properties: additional_sources: anyOf: - items: type: integer type: array - type: 'null' title: Additional Sources catalogue_id: title: Catalogue Id type: integer channels_count: title: Channels Count type: integer name: title: Name type: string product_id_key: title: Product Id Key type: string role: title: Role type: string status: title: Status type: string used_by: anyOf: - items: type: integer type: array - type: 'null' title: Used By required: - catalogue_id - name - status - product_id_key - role - additional_sources - used_by - channels_count title: ListCataloguesResponseItem type: object ListCataloguesResponseItem-Output: properties: additional_sources: anyOf: - items: type: integer type: array - type: 'null' title: Additional Sources catalogue_id: title: Catalogue Id type: integer channels_count: title: Channels Count type: integer name: title: Name type: string product_id_key: title: Product Id Key type: string role: title: Role type: string status: title: Status type: string used_by: anyOf: - items: type: integer type: array - type: 'null' title: Used By required: - catalogue_id - name - status - product_id_key - role - channels_count title: ListCataloguesResponseItem type: object ListProductsResponse: $ref: '#/components/schemas/PaginatedResultWithNext_ListProductsResponseItem_' title: ListProductsResponse ListProductsResponseItem: properties: attributes: additionalProperties: true title: Attributes type: object product_id_value: title: Product Id Value type: string required: - product_id_value - attributes title: ListProductsResponseItem type: object PaginatedResultWithNext_ListCataloguesResponseItem_-Input: properties: data: items: $ref: '#/components/schemas/ListCataloguesResponseItem-Input' title: Data type: array limit: title: Limit type: integer next: anyOf: - type: string - type: 'null' title: Next page: title: Page type: integer total: title: Total type: integer required: - data - total - page - limit - next title: PaginatedResultWithNext[ListCataloguesResponseItem] type: object PaginatedResultWithNext_ListCataloguesResponseItem_-Output: properties: data: items: $ref: '#/components/schemas/ListCataloguesResponseItem-Output' title: Data type: array limit: title: Limit type: integer next: anyOf: - type: string - type: 'null' title: Next page: title: Page type: integer total: title: Total type: integer required: - data - total - page - limit - next title: PaginatedResultWithNext[ListCataloguesResponseItem] type: object PaginatedResultWithNext_ListProductsResponseItem_: properties: data: items: $ref: '#/components/schemas/ListProductsResponseItem' title: Data type: array limit: title: Limit type: integer next: anyOf: - type: string - type: 'null' title: Next page: title: Page type: integer total: title: Total type: integer required: - data - total - page - limit - next title: PaginatedResultWithNext[ListProductsResponseItem] type: object PaginatedResultWithNext_str_: properties: data: items: type: string title: Data type: array limit: title: Limit type: integer next: anyOf: - type: string - type: 'null' title: Next page: title: Page type: integer total: title: Total type: integer required: - data - total - page - limit - next title: PaginatedResultWithNext[str] type: object RuleDuplicationAttributeResponse: properties: key: description: The identifier of the attribute in the system examples: - price - SRC_123456:quantity title: Key type: string name: description: The name of the attribute examples: - price - quantity title: Name type: string source: description: The ID of the source this attribute is attached to title: Source type: integer required: - name - key - source title: RuleDuplicationAttributeResponse type: object RuleDuplicationErrorResponse: properties: attribute: anyOf: - $ref: '#/components/schemas/RuleDuplicationAttributeResponse' - type: 'null' description: The attribute related to the error, if applicable attributes: anyOf: - items: $ref: '#/components/schemas/RuleDuplicationAttributeResponse' type: array - type: 'null' description: The list of attributes related to the error, if applicable title: Attributes error_code: description: The error code identifying the type of duplication error enum: - rule_duplication.self_duplication - rule_duplication.source_rule.not_found - rule_duplication.validity_period - rule_duplication.referenced_attributes.not_found - rule_duplication.target_attribute.duplicate_new_on_not_new - rule_duplication.target_attribute.duplicate_not_new_on_new - rule_duplication.target_attribute.not_found - rule_duplication.target_attribute.default_rule.already_exists - rule_duplication.target_attribute.default_rule.already_duplicated - rule_duplication.unknown_error - catalogue.not_found title: Error Code type: string message: description: A human-readable message describing the error title: Message type: string required: - error_code - message title: RuleDuplicationErrorResponse type: object RuleDuplicationOperationEntryResponse: properties: errors: anyOf: - items: $ref: '#/components/schemas/RuleDuplicationErrorResponse' type: array - type: 'null' title: Errors new_rule_id: anyOf: - type: integer - type: 'null' title: New Rule Id source_catalogue_id: title: Source Catalogue Id type: integer source_rule_id: title: Source Rule Id type: integer success: title: Success type: boolean target_catalogue_id: title: Target Catalogue Id type: integer warnings: anyOf: - items: $ref: '#/components/schemas/RuleDuplicationErrorResponse' type: array - type: 'null' title: Warnings required: - source_rule_id - source_catalogue_id - target_catalogue_id - success title: RuleDuplicationOperationEntryResponse type: object RuleDuplicationOperationResponse: examples: - created_at: '2026-05-19T09:17:20.989272+00:00' failure_count: 1 operation_id: 019e3f81-3f25-716f-8ee3-b7f651ede48e results: - new_rule_id: 74 source_catalogue_id: 1 source_rule_id: 19 success: true target_catalogue_id: 4 - errors: - error_code: rule_duplication.unknown_error message: 'Failed to duplicate rule 1: Missing required attribute ''quantity''.' source_catalogue_id: 1 source_rule_id: 1 success: false target_catalogue_id: 4 - new_rule_id: 72 source_catalogue_id: 1 source_rule_id: 2 success: true target_catalogue_id: 4 warnings: - message: The rule has a validity period that will not be duplicated. warning_code: rule_duplication.validity_period - new_rule_id: 73 source_catalogue_id: 1 source_rule_id: 3 success: true target_catalogue_id: 4 success_count: 3 total_rules: 4 user_id: 123 properties: created_at: anyOf: - format: date-time type: string - type: 'null' title: Created At failure_count: title: Failure Count type: integer operation_id: title: Operation Id type: string results: items: $ref: '#/components/schemas/RuleDuplicationOperationEntryResponse' title: Results type: array success_count: title: Success Count type: integer total_rules: title: Total Rules type: integer user_id: anyOf: - type: integer - type: 'null' title: User Id required: - operation_id - total_rules - success_count - failure_count - results title: RuleDuplicationOperationResponse type: object UpdateProductRequest: additionalProperties: anyOf: - type: integer - type: number - type: string - type: boolean - type: 'null' title: UpdateProductRequest type: object UpdateProductResponse: title: UpdateProductResponse UpdateProductsRequest: additionalProperties: $ref: '#/components/schemas/UpdateProductsRequestItem' title: UpdateProductsRequest type: object UpdateProductsRequestItem: additionalProperties: anyOf: - type: integer - type: number - type: string - type: boolean - type: 'null' title: UpdateProductsRequestItem type: object UpdateProductsResponse: additionalProperties: $ref: '#/components/schemas/UpdateProductsResponseItem' title: UpdateProductsResponse type: object UpdateProductsResponseItem: properties: errors: anyOf: - items: type: string type: array - type: 'null' title: Errors status: title: Status type: string required: - status title: UpdateProductsResponseItem type: object UpsertProductsRequest: items: additionalProperties: anyOf: - type: integer - type: number - type: string - type: boolean - type: 'null' type: object title: UpsertProductsRequest type: array UpsertProductsResponse: items: $ref: '#/components/schemas/UpsertProductsResponseItem' title: UpsertProductsResponse type: array UpsertProductsResponseItem: properties: errors: anyOf: - items: type: string type: array - type: 'null' title: Errors product_id_value: anyOf: - type: string - type: 'null' title: Product Id Value status: title: Status type: string required: - product_id_value - status - errors title: UpsertProductsResponseItem type: object ValidationError: properties: loc: items: anyOf: - type: string - type: integer title: Location type: array msg: title: Message type: string type: title: Error Type type: string required: - loc - msg - type title: ValidationError type: object description: 'Update the value of some attributes for a specific product. **Closed Beta – Authorised Users Only** This endpoint is under development and available only to approved beta participants. Contact [our support](mailto:help@lengow.com).' operationId: update_product_public_catalogues__catalogue_id__products__product_id_value__patch parameters: - description: The ID of the catalogue in: path name: catalogue_id required: true schema: description: The ID of the catalogue title: Catalogue Id type: integer - description: The ID of the product to update in: path name: product_id_value required: true schema: description: The ID of the product to update title: Product Id Value type: string - description: The ID of the account in: query name: account_id required: true schema: description: The ID of the account title: Account Id type: integer requestBody: content: application/json: example: color: blue size: M schema: $ref: '#/components/schemas/UpdateProductRequest' description: Attributes to update required: true responses: '200': content: application/json: example: status: updated schema: $ref: '#/components/schemas/UpdateProductResponse' description: Product updated successfully. '400': content: application/json: example: detail: error_code: product.validation_error errors: - 'Cannot change ''sku'' from ''123'' to ''456'': product identifiers are not mutable.' - 'Unknown attributes for catalogue schema: ''color''' message: Product update failed with validation errors. description: Invalid request, e.g., trying to update invalid attributes. '404': content: application/json: examples: catalogue_not_found: summary: Catalogue not found value: detail: error_code: catalogue.not_found message: Catalogue 123 not found in account 456 product_not_found: summary: Product not found value: detail: error_code: product.not_found message: Product 'ABC123' not found in catalogue 123 description: Catalogue or product not found. '409': content: application/json: example: detail: error_code: catalogue.draft.forbidden_operation message: Cannot perform product operations on draft catalogue 123. description: Catalogue is in draft status, operation forbidden '422': content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' description: Validation Error '429': $ref: '#/components/responses/TooManyRequests' summary: '[BETA] Update product' tags: - Catalogues /v3.0/report/export: get: AvailableFilters: properties: error_types: description: List of types that can be used to filter errors. Only types with at least one error are returned. type: array severity_levels: description: "List of types that can be\n used to filter errors. Only types with at least one error are returned." type: array required: - error_types - severity_levels type: object DatabaseStatus: properties: host: description: Database server host type: string name: description: Database name type: string required: - host - name type: object DigestReportOffersEntry: properties: delta_product_healthy_rate: description: Rate delta for healthy products since previous synchronization. format: decimal nullable: true pattern: ^-?\d{0,8}(?:\.\d{0,2})?$ type: string delta_products_in_error_rate: description: Rate delta for products in error since previous synchronization. format: decimal nullable: true pattern: ^-?\d{0,8}(?:\.\d{0,2})?$ type: string delta_products_in_feed_rate: description: Rate of change for products in feed since previous synchronization. format: decimal nullable: true pattern: ^-?\d{0,8}(?:\.\d{0,2})?$ type: string delta_products_with_warning_rate: description: Rate delta for products with warning since previous synchronization. format: decimal nullable: true pattern: ^-?\d{0,8}(?:\.\d{0,2})?$ type: string last_report_date: description: Last received report date for this report type. nullable: true type: string products_healthy: description: Number of healthy products. nullable: true type: integer products_healthy_rate: description: Rate of healthy products. format: decimal nullable: true pattern: ^-?\d{0,8}(?:\.\d{0,2})?$ type: string products_in_error: description: Number of products in error. nullable: true type: integer products_in_feed: description: Total number of products in the feed. nullable: true type: integer products_with_warning: description: Number of products with warning. nullable: true type: integer timestamp: description: 'Report timestamp. Example: "2019-12-24 21:03:00"' nullable: true type: string required: - delta_product_healthy_rate - delta_products_in_error_rate - delta_products_in_feed_rate - delta_products_with_warning_rate - products_healthy - products_healthy_rate - products_in_error - products_in_feed - products_with_warning - timestamp type: object DigestReportProductsEntry: properties: delta_product_healthy_rate: description: Rate delta for healthy products since previous synchronization. format: decimal nullable: true pattern: ^-?\d{0,8}(?:\.\d{0,2})?$ type: string delta_products_in_error_rate: description: Rate delta for products in error since previous synchronization. format: decimal nullable: true pattern: ^-?\d{0,8}(?:\.\d{0,2})?$ type: string delta_products_in_feed_rate: description: Rate of change for products in feed since previous synchronization. format: decimal nullable: true pattern: ^-?\d{0,8}(?:\.\d{0,2})?$ type: string delta_products_with_warning_rate: description: Rate delta for products with warning since previous synchronization. format: decimal nullable: true pattern: ^-?\d{0,8}(?:\.\d{0,2})?$ type: string last_report_date: description: Last received report date for this report type. nullable: true type: string products_healthy: description: Number of healthy products. nullable: true type: integer products_healthy_rate: description: Rate of healthy products. format: decimal nullable: true pattern: ^-?\d{0,8}(?:\.\d{0,2})?$ type: string products_in_error: description: Number of products in error. nullable: true type: integer products_in_feed: description: Total number of products in the feed. nullable: true type: integer products_with_warning: description: Number of products with warning. nullable: true type: integer timestamp: description: 'Report timestamp. Example: "2019-12-24 21:03:00"' nullable: true type: string required: - delta_product_healthy_rate - delta_products_in_error_rate - delta_products_in_feed_rate - delta_products_with_warning_rate - products_healthy - products_healthy_rate - products_in_error - products_in_feed - products_with_warning - timestamp type: object DigestResponse: properties: available_filters: $ref: '#/components/schemas/AvailableFilters' last_report_date: type: string measures: $ref: '#/components/schemas/Measures' required: - available_filters - last_report_date - measures type: object DigestV2Reports: properties: offers: $ref: '#/components/schemas/DigestReportOffersEntry' products: $ref: '#/components/schemas/DigestReportProductsEntry' required: - offers - products type: object DigestV2Response: properties: reports: $ref: '#/components/schemas/DigestV2Reports' required: - reports type: object Error: properties: attribute: $ref: '#/components/schemas/ErrorAttribute' code: type: string error_id: type: integer header_slug: type: string impacted_line_id: type: integer indicator: $ref: '#/components/schemas/ErrorIndicator' message: type: string severity: nullable: true type: string required: - attribute - code - error_id - header_slug - impacted_line_id - indicator - message type: object ErrorAttribute: properties: name: type: string required: - name type: object ErrorIndicator: properties: count: type: integer type: type: string required: - count - type type: object ErrorsResponseSeralizer: properties: errors: items: $ref: '#/components/schemas/Error' type: array total_error_count: type: integer required: - errors - total_error_count type: object GroupsResponse: properties: error: $ref: '#/components/schemas/SeverityResponse' slug: description: Identifier of the group type: string warning: $ref: '#/components/schemas/SeverityResponse' required: - error - slug - warning type: object LineErrorCount: properties: count: description: Number of lines in error. type: integer required: - count type: object LineWarningCount: properties: count: description: Number of lines with warning. type: integer required: - count type: object Measures: properties: instances_in_error: $ref: '#/components/schemas/LineErrorCount' instances_with_warning: $ref: '#/components/schemas/LineWarningCount' products_in_error: $ref: '#/components/schemas/ProductsErrorCount' products_in_feed: $ref: '#/components/schemas/ProductsSent' products_published: allOf: - $ref: '#/components/schemas/ProductsPublished' description: Number of products actually published. products_with_warning: $ref: '#/components/schemas/ProductsErrorCount' required: - instances_in_error - instances_with_warning - products_in_error - products_in_feed - products_published - products_with_warning type: object Product: properties: additional_data: description: Additional data attached on product. type: object errors: description: Errors for the product. type: object feed_id: description: Feed id attached for product. type: integer level: type: integer message: description: Message attached for product. type: string product_id: description: ID of the product. type: string task_id: description: Task ID for the product. type: string updated_at: type: string required: - additional_data - errors - feed_id - level - message - product_id - task_id - updated_at type: object ProductsErrorCount: properties: count: description: Number of products in error. type: integer required: - count type: object ProductsPublished: properties: count: description: Number of products actually published. type: integer percentage: description: Percentage of products actually published. type: integer required: - count - percentage type: object ProductsResponse: properties: count: description: Number of products in status online. type: integer limit: description: Number of products to return. type: integer products: items: $ref: '#/components/schemas/Product' type: array required: - count - limit - products type: object ProductsSent: properties: count: description: Number of products sent to the channel. type: integer percentage: description: Percentage of products sent to the channel. type: integer required: - count - percentage type: object ReportLinesResponse: properties: error_header_slug: description: The slug of the high-level description of the error. type: string group_slug: description: Identifier of the group. type: string header: description: The list of the column names to be displayed. Attribute names are prefixed with `$`. type: string nb_products_impacted: description: Number of distinct products impacted by the returned report lines. nullable: true type: integer total_report_line_count: description: Total number of report lines. type: integer values: description: A list of arrays containing values. Each array has the same number of elements as `header` type: array required: - error_header_slug - group_slug - header - total_report_line_count - values type: object SeverityResponse: properties: nb_instances: description: Number of this severity events type: integer nb_products_impacted: description: Number of products related to this severity event type: integer required: - nb_instances - nb_products_impacted type: object ShardStatus: properties: key: description: Shard key type: integer ready: description: False if the data is being migrated across servers type: boolean required: - key - ready type: object StatusResponse: properties: database: $ref: '#/components/schemas/DatabaseStatus' shard: $ref: '#/components/schemas/ShardStatus' status: default: 200 description: HTTP Status type: integer required: - database - shard type: object description: 'Export errors This API is used to generate exports in CSV, with `|` as field separator Can return `503` status if data shard is being migrated' operationId: Get product reports parameters: - description: feed_id Identifier of the feed. in: query name: feed_id required: true schema: type: integer - description: "Number of days to skip before the last report was received. \n\nWhen nb_days_to_skip equals 0, the last\ \ digest is returned. \n\nWhen nb_days_to_skip equals 1, the digest of the day before is returned.\n\nFor instance,\ \ if the last report was received today at 11:03, the last report received yesterday at 11:03 is considered." in: query name: nb_days_to_skip schema: default: 0 type: integer - in: path name: version required: true schema: pattern: ^[0-9]+(.[0-9]+)?$ type: string responses: '200': content: text/csv: schema: type: string '429': $ref: '#/components/responses/TooManyRequests' '503': content: application/json: schema: type: object summary: Get product reports tags: - Marketplaces schemes: https x-tagGroups: - name: Reference tags: - Authentication - Rate limits - Marketplaces - Catalogues servers: - url: https://api.lengow.io description: Production