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/sync-runs?sync_id=example&page=1&size=20';const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url 'https://api.eu1.luigisbox.ai/catalog/v1/example/sync-runs?sync_id=example&page=1&size=20' \ --header 'Authorization: Bearer <token>'Return one page of the runs one sync started, across the catalog’s feeds, newest first.
A sync starts at most one run per active feed and attempt (the feeds after a failed one
are not run), so this answers how it went without paging through every feed’s history; a
sync retried after an interruption on our side lists every attempt, and each feed’s newest
run is its outcome. total counts at most 10,000 runs, so a total of 10,000 means
10,000 or more. A sync_id the catalog has no runs of returns an empty page; one that is
not a sync identifier is rejected with 422.
Authorizations
Section titled “Authorizations ”Parameters
Section titled “ Parameters ”Path Parameters
Section titled “Path Parameters ”Query Parameters
Section titled “Query Parameters ”The sync_id a sync was triggered with, or that a run carries. Required.
The sync_id a sync was triggered with, or that a run carries. Required.
1-based page number.
1-based page number.
Number of items per page.
Number of items per page.
Responses
Section titled “ Responses ”Successful Response
object
The items on this page.
object
Catalog the run belongs to.
When the run was recorded.
What a run’s format detection found at the beginning of the feed file.
object
Whether the detection was unambiguous; always false for unknown.
The format the beginning of the file was read as. unknown when that part held nothing but whitespace; a file that begins like neither XML nor JSON is reported as csv, usually with confident false. More formats may be added.
Feed the run processed.
Whether per-item fingerprints were honoured; false means every item was resent.
Whether the run ignored the unchanged-feed check and preempted any in-flight run.
When the run started; a run is recorded as it starts.
Lifecycle status of the run.
Why a run ended the way it did.
The run’s identifier: lbsr_ followed by ten lowercase Crockford base32 characters. Every run has one, and it does not change. It is random, so it says nothing about when the run happened or how many runs came before it; runs are listed by started_at.
Whether the run came from the schedule or a manual request.
1-based page number.
Number of items per page.
Total number of items across all pages.
Example
{ "items": [ { "detection": { "format": "xml" }, "status": "running", "status_reason": "timeout", "trigger": "schedule" } ]}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"}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.