Create or update a product by SKU
const url = 'https://api.europlaybook.com/v1/products/by-sku/example';const options = { method: 'PUT', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"gtin":"8712345678906","net_weight_mg":100000,"title":"Green tea 100 g"}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request PUT \ --url https://api.europlaybook.com/v1/products/by-sku/example \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "gtin": "8712345678906", "net_weight_mg": 100000, "title": "Green tea 100 g" }'Creates the product (201) or updates the fields you send (200). Product data only: packaging goes through proposals. Changing a product does not touch its packaging confirmation.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”Request Bodyrequired
Section titled “Request Bodyrequired”Create the product with this SKU, or update the fields you send. Fields you leave out stay as they are (on create they get their default).
object
Product name.
Responses
Section titled “Responses”OK
object
Your stock keeping unit; unique per account.
Product name.
Brand on the product.
Customs tariff code.
ISO 3166-1 alpha-2.
Archived products are kept for history.
A bundle of other products (bill of materials).
Electrical/electronic equipment (WEEE).
Textile product (textiles EPR).
Gate 1: a person confirmed this product’s packaging. Changing packaging (also through a proposal) clears it until someone confirms again in the portal.
Gate 1 in detail (complements packaging_confirmed, which equals state confirmed when the packaging is unchanged).
Example
{ "id": "0199f5a2-7c1e-7b4a-9d0e-3f6c2a1b8e44", "sku": "TEA-001", "title": "Green tea 100 g", "brand_name": "Demo Garden", "gtin": "8712345678906", "hs_code": "090210", "country_of_origin": "NL", "net_weight_mg": 100000, "status": "active", "confirmation": { "state": "none" }}Created
object
Your stock keeping unit; unique per account.
Product name.
Brand on the product.
Customs tariff code.
ISO 3166-1 alpha-2.
Archived products are kept for history.
A bundle of other products (bill of materials).
Electrical/electronic equipment (WEEE).
Textile product (textiles EPR).
Gate 1: a person confirmed this product’s packaging. Changing packaging (also through a proposal) clears it until someone confirms again in the portal.
Gate 1 in detail (complements packaging_confirmed, which equals state confirmed when the packaging is unchanged).
Example
{ "id": "0199f5a2-7c1e-7b4a-9d0e-3f6c2a1b8e44", "sku": "TEA-001", "title": "Green tea 100 g", "brand_name": "Demo Garden", "gtin": "8712345678906", "hs_code": "090210", "country_of_origin": "NL", "net_weight_mg": 100000, "status": "active", "confirmation": { "state": "none" }}Bad Request
object
Example
{ "detail": "This API key lacks the scope catalogue:write", "code": "insufficient_scope", "params": { "required_scope": "catalogue:write" }}Unauthorized
object
Example
{ "detail": "This API key lacks the scope catalogue:write", "code": "insufficient_scope", "params": { "required_scope": "catalogue:write" }}Forbidden
object
Example
{ "detail": "This API key lacks the scope catalogue:write", "code": "insufficient_scope", "params": { "required_scope": "catalogue:write" }}Not Found
object
Example
{ "detail": "This API key lacks the scope catalogue:write", "code": "insufficient_scope", "params": { "required_scope": "catalogue:write" }}Conflict
object
Example
{ "detail": "This API key lacks the scope catalogue:write", "code": "insufficient_scope", "params": { "required_scope": "catalogue:write" }}Unprocessable Content
object
What went wrong, in English, for people and logs.
Stable machine-readable error code; translate and branch on this.
Per-field problems (pydantic format: loc, msg, type).
object
Example
{ "detail": "This API key lacks the scope catalogue:write", "code": "insufficient_scope", "params": { "required_scope": "catalogue:write" }, "errors": []}Too Many Requests
object
Example
{ "detail": "This API key lacks the scope catalogue:write", "code": "insufficient_scope", "params": { "required_scope": "catalogue:write" }}