Pre-launch API. The concepts described here are settled, but the API shape is not: request and response fields, parameters and defaults can still change. Build against it, and talk to your Luigi's Box contact before you put an integration into production.
const url = 'https://api.eu1.luigisbox.ai/catalog/v1/example/sources/feeds/1';const options = { method: 'PATCH', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"active":true,"catalog_type":"example","csv_delimiter":"example","csv_has_header":true,"delete_threshold":1,"expected_version":1,"format":"xml","group_id_field":"example","group_primary_attribute_name":"example","group_primary_field":"example","identity_field":"example","item_tag":"example","json_path":"example","mapping_id":1,"position":1,"transport_options":{},"url":"example"}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request PATCH \ --url https://api.eu1.luigisbox.ai/catalog/v1/example/sources/feeds/1 \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "active": true, "catalog_type": "example", "csv_delimiter": "example", "csv_has_header": true, "delete_threshold": 1, "expected_version": 1, "format": "xml", "group_id_field": "example", "group_primary_attribute_name": "example", "group_primary_field": "example", "identity_field": "example", "item_tag": "example", "json_path": "example", "mapping_id": 1, "position": 1, "transport_options": {}, "url": "example" }'Change the fields the request sets and return the feed with its new version.
expected_version must be the feed’s current version; otherwise the update is a 409 and
nothing changes. Omitted fields stay as they are; null clears a field, except url,
catalog_type, active and position, which cannot be cleared.
The request is checked against the stored feed: format-specific fields must fit the
feed’s format, group_primary_field and group_primary_attribute_name exclude each
other, group_primary_attribute_name needs a group_id_field, and a mapping_id must
name a mapping of the same catalog.
Authorizations
Section titled “Authorizations ”Parameters
Section titled “ Parameters ”Path Parameters
Section titled “Path Parameters ”The feed’s feed_id.
The feed’s feed_id.
Request Body required
Section titled “Request Body required ”object
Whether the feed runs; a feed set to false stays registered, and every later sync skips it. A sync already running still finishes it. Omit it to keep the current one.
Object type of the feed’s records, e.g. product, category, brand or article. Omit it to keep the current one.
The feed’s version this change is based on; a stored version that has moved on is a 409.
Run order among the catalog’s feeds, lowest first, then by feed_id; product feeds run after all the others. Omit it to keep the current one.
Where to fetch the feed: an http or https URL. Omit it to keep the current one.
Responses
Section titled “ Responses ”Successful Response
object
Whether the feed runs; a feed set to false stays registered, and every later sync skips it. A sync already running still finishes it.
Catalog the feed belongs to.
Object type of the feed’s records, e.g. product, category, brand or article.
When the feed was registered.
The feed’s identifier.
Run order among the catalog’s feeds, lowest first, then by feed_id; product feeds run after all the others.
When the feed was last changed.
Where to fetch the feed: an http or https URL.
Raised by every change; send it as expected_version to change the feed.
Example generated
{ "active": true, "catalog_id": "example", "catalog_type": "example", "created_at": "2026-04-15T12:00:00Z", "csv_delimiter": "example", "csv_has_header": true, "delete_threshold": 1, "feed_id": 1, "format": "example", "group_id_field": "example", "group_primary_attribute_name": "example", "group_primary_field": "example", "identity_field": "example", "item_tag": "example", "json_path": "example", "mapping_id": 1, "position": 1, "transport_options": {}, "updated_at": "2026-04-15T12:00:00Z", "url": "example", "version": 1}Missing or invalid credentials
Canonical error body — every non-2xx response uses this shape.
object
Machine-readable error context; empty object when there is nothing to add.
object
Stable machine code naming why a well-formed request was refused: snake_case, prefixed by its domain — e.g. filter_unknown_field or cursor_mismatch. Safe to branch on; reason is not. Absent when the status code says all there is to say.
Every field-level problem found in the request, when validation is what failed. Absent when the rejection is not about a specific value.
One field-level reason a request was rejected.
object
Path to the offending value from the request root, e.g. ["body", "filters", 0, "operator"].
What is wrong with the value at loc.
Stable machine code for the problem, e.g. missing or string_too_short.
Human-readable, actionable error message.
Example generated
{ "exception_details": { "error_code": "example", "validation_errors": [ { "loc": [ "example" ], "msg": "example", "type": "example" } ] }, "reason": "example", "request_id": "example"}Authenticated but not permitted
Canonical error body — every non-2xx response uses this shape.
object
Machine-readable error context; empty object when there is nothing to add.
object
Stable machine code naming why a well-formed request was refused: snake_case, prefixed by its domain — e.g. filter_unknown_field or cursor_mismatch. Safe to branch on; reason is not. Absent when the status code says all there is to say.
Every field-level problem found in the request, when validation is what failed. Absent when the rejection is not about a specific value.
One field-level reason a request was rejected.
object
Path to the offending value from the request root, e.g. ["body", "filters", 0, "operator"].
What is wrong with the value at loc.
Stable machine code for the problem, e.g. missing or string_too_short.
Human-readable, actionable error message.
Example generated
{ "exception_details": { "error_code": "example", "validation_errors": [ { "loc": [ "example" ], "msg": "example", "type": "example" } ] }, "reason": "example", "request_id": "example"}Resource not found
Canonical error body — every non-2xx response uses this shape.
object
Machine-readable error context; empty object when there is nothing to add.
object
Stable machine code naming why a well-formed request was refused: snake_case, prefixed by its domain — e.g. filter_unknown_field or cursor_mismatch. Safe to branch on; reason is not. Absent when the status code says all there is to say.
Every field-level problem found in the request, when validation is what failed. Absent when the rejection is not about a specific value.
One field-level reason a request was rejected.
object
Path to the offending value from the request root, e.g. ["body", "filters", 0, "operator"].
What is wrong with the value at loc.
Stable machine code for the problem, e.g. missing or string_too_short.
Human-readable, actionable error message.
Example generated
{ "exception_details": { "error_code": "example", "validation_errors": [ { "loc": [ "example" ], "msg": "example", "type": "example" } ] }, "reason": "example", "request_id": "example"}State conflict
Canonical error body — every non-2xx response uses this shape.
object
Machine-readable error context; empty object when there is nothing to add.
object
Stable machine code naming why a well-formed request was refused: snake_case, prefixed by its domain — e.g. filter_unknown_field or cursor_mismatch. Safe to branch on; reason is not. Absent when the status code says all there is to say.
Every field-level problem found in the request, when validation is what failed. Absent when the rejection is not about a specific value.
One field-level reason a request was rejected.
object
Path to the offending value from the request root, e.g. ["body", "filters", 0, "operator"].
What is wrong with the value at loc.
Stable machine code for the problem, e.g. missing or string_too_short.
Human-readable, actionable error message.
Example generated
{ "exception_details": { "error_code": "example", "validation_errors": [ { "loc": [ "example" ], "msg": "example", "type": "example" } ] }, "reason": "example", "request_id": "example"}Request validation failed
Canonical error body — every non-2xx response uses this shape.
object
Machine-readable error context; empty object when there is nothing to add.
object
Stable machine code naming why a well-formed request was refused: snake_case, prefixed by its domain — e.g. filter_unknown_field or cursor_mismatch. Safe to branch on; reason is not. Absent when the status code says all there is to say.
Every field-level problem found in the request, when validation is what failed. Absent when the rejection is not about a specific value.
One field-level reason a request was rejected.
object
Path to the offending value from the request root, e.g. ["body", "filters", 0, "operator"].
What is wrong with the value at loc.
Stable machine code for the problem, e.g. missing or string_too_short.
Human-readable, actionable error message.
Example generated
{ "exception_details": { "error_code": "example", "validation_errors": [ { "loc": [ "example" ], "msg": "example", "type": "example" } ] }, "reason": "example", "request_id": "example"}Service temporarily unavailable
Canonical error body — every non-2xx response uses this shape.
object
Machine-readable error context; empty object when there is nothing to add.
object
Stable machine code naming why a well-formed request was refused: snake_case, prefixed by its domain — e.g. filter_unknown_field or cursor_mismatch. Safe to branch on; reason is not. Absent when the status code says all there is to say.
Every field-level problem found in the request, when validation is what failed. Absent when the rejection is not about a specific value.
One field-level reason a request was rejected.
object
Path to the offending value from the request root, e.g. ["body", "filters", 0, "operator"].
What is wrong with the value at loc.
Stable machine code for the problem, e.g. missing or string_too_short.
Human-readable, actionable error message.
Example generated
{ "exception_details": { "error_code": "example", "validation_errors": [ { "loc": [ "example" ], "msg": "example", "type": "example" } ] }, "reason": "example", "request_id": "example"}Was this page helpful?
Thanks.