GPSR Contacts
Overview
The Contacts API lets you manage GPSR (General Product Safety Regulation) contact information for your assortment: the manufacturer's contact details and, where applicable, the contact details of your selected EU responsible person / representative.
Contact hierarchy
Contacts live at two levels, from broadest to most specific:
| Level | Scope | Base path |
|---|---|---|
| Manufacturer | Applies to all of a manufacturer's items unless overridden | /contacts/manufacturers/{manufacturer_name} |
| Product | Overrides the manufacturer-level contact for a specific product | /contacts/products/{ean} |
Contact types
Each level supports two types (at most one of each per seller):
contact_type |
Meaning |
|---|---|
manufacturer |
The manufacturer of the product |
eu-responsible-person |
The selected EU responsible person / representative |
How contacts are surfaced on the PDP
Each contact stored via this API is seller-scoped — it represents your contact data for a given manufacturer or product, independent of other sellers. How contacts are surfaced to end customers depends on the type:
| Contact type | PDP behaviour |
|---|---|
manufacturer |
One contact is selected from all sellers' submissions using Kaufland's internal decision logic. Submitting a contact does not guarantee it will be displayed. |
eu-responsible-person |
All sellers' submissions are shown on the PDP independently. Your contact will always appear if set. |
Product Contacts
Product-level contacts are addressed by EAN and override the manufacturer-level contact for that product.
Listing a product's contacts
GET https://sellerapi.kaufland.com/v2/contacts/products/4006381333931
{
"contacts": [
{
"contact_type": "manufacturer",
"contact": {
"name": "Musterbetrieb GmbH",
"postal_address": {
"street": "Musterstraße",
"house_number": "1A",
"city": "Berlin",
"postal_code": "10115",
"country_code": "DE",
"address_additional": null
},
"contact_info": {
"email_address": "[email protected]",
"website_url": "https://musterbetrieb.example/gpsr",
"phone_number": null
}
},
"created_at": "2024-03-15T09:00:00.000Z",
"updated_at": null
}
]
}
Returns an empty contacts array when no contacts have been set. Returns 404 when the EAN cannot be resolved to a product in your assortment.
Creating or replacing a product contact
PUT https://sellerapi.kaufland.com/v2/contacts/products/4006381333931/manufacturer
Idempotent — if a contact of the given type already exists for this product it is replaced in full.
{
"name": "Musterbetrieb GmbH",
"postal_address": {
"street": "Musterstraße",
"house_number": "1A",
"city": "Berlin",
"postal_code": "10115",
"country_code": "DE"
},
"contact_info": {
"email_address": "[email protected]",
"website_url": "https://musterbetrieb.example/gpsr"
}
}
contact_info must contain at least one of email_address or
website_url. phone_number is always optional.
website_url must be a valid URL with a hostname that has a top-level domain.
The scheme (e.g. https://) is optional — bare domains like
example.com are accepted.
postal_address.country_code is case-insensitive and normalized to uppercase.
postal_address.postal_code is required whenever country_code is an
EU member state (optional otherwise). When contact_type is
eu-responsible-person, country_code itself must be an EU member
state.
Removing a product contact
DELETE https://sellerapi.kaufland.com/v2/contacts/products/4006381333931/manufacturer
Idempotent — returns 204 on success even if no contact of that type was set for the product. Returns 404 only when the EAN cannot be resolved to a product.
Manufacturer Contacts
Manufacturer-level contacts are addressed by manufacturer_name, resolved
server-side against the Kaufland product catalog — including configured synonyms, so alternate
spellings and capitalisation variants (e.g. BOSCH, Bosch,
bosch) are accepted and transparently mapped to the canonical entry. Names
containing spaces or special characters must be percent-encoded (e.g.
M%C3%BCller%20GmbH).
Listing a manufacturer's contacts
GET https://sellerapi.kaufland.com/v2/contacts/manufacturers/Bosch
{
"manufacturer_name": "Robert Bosch GmbH",
"contacts": []
}
The response includes the canonical manufacturer_name as stored in the catalog,
so you can confirm which entry was matched when a synonym or alternate spelling was used.
Returns 404 when the name cannot be resolved to any known manufacturer.
Creating or replacing a manufacturer contact
PUT https://sellerapi.kaufland.com/v2/contacts/manufacturers/Bosch/eu-responsible-person
Same request body shape and idempotency semantics as upserting a product contact.
Removing a manufacturer contact
DELETE https://sellerapi.kaufland.com/v2/contacts/manufacturers/Bosch/eu-responsible-person
Idempotent — returns 204 on success even if no contact of that type was set for the manufacturer. Returns 404 only when the name cannot be resolved to a known manufacturer.
Error responses
Errors follow the standard Problem Details format. See the Problem Types reference for the full list.
Most request-body validation failures — including all of the rules below — are reported as
400 /problems/validation-error, with the specific field and reason in the
response's errors array:
contact_infomust contain at least one ofemail_addressorwebsite_urlwebsite_urlmust be a valid URL with a hostname that has a top-level domain; the scheme (e.g.https://) is optional — bare domains likeexample.comare acceptedpostal_address.country_codemust be a 2-letter ISO 3166-1 alpha-2 code (case-insensitive, normalized to uppercase)postal_address.postal_codeis required whenevercountry_codeis an EU member statepostal_address.country_codemust be an EU member state whencontact_typeiseu-responsible-personname,street,city, andaddress_additionalare limited to 255 characters;house_numberandphone_numberto 50;postal_codeto 20;website_urlto 2048
Not-found errors use dedicated types: 404 /problems/contacts/product-not-found when
the EAN can't be resolved, and 404 /problems/contacts/manufacturer-not-found when the
manufacturer name can't be resolved. See the Problem Types
reference for the remaining, less common types.