Getting Started

On this page you can see a full example of using the Kaufland marketplace API to complete a simple task: listing a product for sale.

We assume you are already registered as a Kaufland marketplace seller and you want to offer a product for sale: a cat scratching post.

Note: In this example, we will assume that other sellers are already offering the product for sale on the Kaufland marketplace. If this is a completely new product for Kaufland marketplace, the process is a bit more complicated. You can read the full documentation for it on the Managing Product Data page.

Defining the offer JSON

The Kaufland marketplace API accepts JSON-formatted data, so you'll need to create a JSON object that represents the scratching posts you have. Here's the JSON we will use for our scratching posts:

	"ean": "4011905437873",
	"condition": "new",
	"listing_price": 4550,
	"minimum_price": 3990,
	"amount": 9,
	"note": "Important notes for the customer",
    "delivery_time_min": 3,
	"delivery_time_max": 8,
	"location": "DE"

For explanations of what each property means, see the Updating inventory with the REST API section of the Managing Inventory page.

Uploading the JSON

Now that we know what our JSON object should look like, we need to send it to the Kaufland marketplace through the REST API. We can use the below PHP code, which includes the signRequest function from the REST API documentation page.

Note: you will need the API keys from your API settings page to set the $clientKey and $secretKey in the example code.


function signRequest($method, $uri, $body, $timestamp, $secretKey)
	$string = implode("\n", [

	return hash_hmac('sha256', $string, $secretKey);

$baseUrl = '';

// Credentials for the API
$clientKey = '35f5dba43b471cd2ad28fd68e4825e2b';
$secretKey = 'b3575f222f7b768c25160b879699118b331c6883dd6010864b7ead130be77cd5';

// Define the POST data
$data = [
	"ean"           => "9780470527580",
	"condition"     => "new",
	"listing_price" => 4550,
	"minimum_price" => 3990,
	"amount"        => 9,
	"delivery_time_min": 3,
	"delivery_time_max": 8,
	"location"      => "DE"

$jsonData = json_encode($data);

// We're adding a new unit
$uri = $baseUrl . '/units/';

// Current Unix timestamp in seconds
$timestamp = time();

// Name of your partner solution
$userAgent = 'test'

// Define all the mandatory headers
$headers = [
    'Accept: application/json',
    'Shop-Client-Key: ' . $clientKey,
    'Shop-Timestamp: ' . $timestamp,
    'Shop-Signature: ' . signRequest('POST', $uri, $jsonData, $timestamp, $secretKey),
	'User-Agent: ' . $userAgent,

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $uri);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonData);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLINFO_HEADER_OUT, 1);

$response = curl_exec($ch);
list($header, $body) = explode("\r\n\r\n", $response, 2);

$responseCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
print("HTTP Response Code: $responseCode\n");

If you run this script, it will output all of the HTTP headers received from the server, as well as the line HTTP Response Code: 201, meaning the data was saved successfully. For this request we are only interested in the HTTP code, not the body of the response, because the POST endpoints in the REST API respond with an empty body. Additionally, you'll see that the Location header was sent, with a value like /units/151177892008/. This is the URL of the new unit (i.e. offer) you have just created.

Next Step

Now that you've seen a simple example of how the REST API works, go on to the Overview Page to learn how the pieces of the Kaufland marketplace API fit together.