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/platform/v1/sponsored-providers';const options = { method: 'POST', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"config":{"aliases":{"additionalProperty":"example"},"area":"example","base_url":"example","change_item_url":false,"domain":"example","platform":"cruxo","position_path":"example","product_id_path":"example","service_path":"example","size":"example","test":1,"use_page":true},"credentials":{"additionalProperty":"example"},"name":"example","organization_id":"example","status":"active"}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://api.eu1.luigisbox.ai/platform/v1/sponsored-providers \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "config": { "aliases": { "additionalProperty": "example" }, "area": "example", "base_url": "example", "change_item_url": false, "domain": "example", "platform": "cruxo", "position_path": "example", "product_id_path": "example", "service_path": "example", "size": "example", "test": 1, "use_page": true }, "credentials": { "additionalProperty": "example" }, "name": "example", "organization_id": "example", "status": "active" }'A create is not scoped by the identifiers in its body: unlike the listing, it requires a grant spanning every organization.
Authorizations
Section titled “Authorizations ”Request Body required
Section titled “Request Body required ”Create a provider account: its credentials and its connection definition.
The platform is the platform discriminator inside config; there is no separate
top-level platform field.
object
The connection-level half of a cruxo config — everything tied to the account itself.
None of it varies by channel or surface. An account needing both a search and a
product variant is two providers.
object
object
object
Lifecycle state of a sponsored-products provider or placement.
Only an active one serves sponsored objects. A disabled one stops
serving shortly after the change and stays editable over the API.
Responses
Section titled “ Responses ”Successful Response
Provider response. credentials is write-only and surfaces only as credentials_set.
The platform is reported inside config (the platform discriminator), not as a
separate top-level field.
object
The connection-level half of a cruxo config — everything tied to the account itself.
None of it varies by channel or surface. An account needing both a search and a
product variant is two providers.
object
object
Lifecycle state of a sponsored-products provider or placement.
Only an active one serves sponsored objects. A disabled one stops
serving shortly after the change and stays editable over the API.
Example
{ "config": { "change_item_url": false, "platform": "cruxo", "use_page": true }, "status": "active"}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
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": { "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
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": { "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
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": { "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
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": { "validation_errors": [ { "loc": [ "example" ], "msg": "example", "type": "example" } ] }, "reason": "example", "request_id": "example"}Was this page helpful?
Thanks.