Vouchers

Introduction

The Vouchers API allows you to create and manage discount vouchers for your products on the Kaufland marketplace. Vouchers give buyers a monetary or percentage discount on selected items, helping you increase visibility and drive sales.

Each voucher is tied to a specific storefront and a set of your product listings. You control the discount type, amount, validity period, and the number of times the voucher can be used.

Prerequisites

Before you can create vouchers, you must accept the Voucher Terms and Conditions for each storefront you want to use. You can check your current acceptance status, storefront eligibility and voucher pricing via the Seller Portal

Note: Vouchers are storefront-specific. You must accept the Terms and Conditions separately for each storefront where you intend to use them.

Voucher Lifecycle

Every voucher has a status field that reflects its current point in the lifecycle. Some transitions are triggered by seller actions, others happen automatically based on time or redemption activity. Knowing the current status is important because most write operations are only permitted in specific states.

Voucher lifecycle state diagram State diagram showing transitions between voucher statuses (new, active, inactive, expired, consumed, deleted) and whether each transition is triggered by a seller action or by the system. begin_at reached usage_limit reached delete deactivate deactivate end_at passed end_at passed new active consumed deleted inactive expired seller action system (time-based or event)

Statuses

Status Meaning
new The voucher has been created but its begin_at date has not yet been reached. It is not visible to buyers yet. From this state the seller can still delete or deactivate the voucher.
active The current date is within the voucher's validity period (begin_at ≤ today ≤ end_at) and the voucher is visible to buyers. The seller can deactivate an active voucher, but it can no longer be deleted.
inactive The seller has manually deactivated the voucher via PATCH /vouchers with status: "inactive". The voucher is no longer offered to buyers. This transition is permanent — an inactive voucher cannot be reactivated.
expired The voucher's end_at date has passed. The voucher is no longer offered to buyers. This is a terminal state.
consumed The voucher's usage_limit has been reached — every available redemption has been used. The voucher is no longer offered to buyers. This is a terminal state.
deleted The seller has removed the voucher via DELETE /vouchers. Only vouchers in new status can be deleted. This is a terminal state.
Note: expired, consumed, and deleted are terminal states — no further transitions occur from them. The only seller-driven transitions are deactivation (from new or active) and deletion (from new only); every other transition is performed by the system.

Performance Metrics

The voucher and voucher-product responses include two performance metrics that are referenced throughout this page. They are also available as sort fields on the list endpoints.

  • acosAdvertising Cost of Sales, expressed as a percentage. Computed as (voucher_fee / total_sales) * 100. Lower values indicate a more cost-efficient voucher.
  • roasReturn on Ad Spend, expressed as a ratio. Computed as total_sales / voucher_fee. Higher values indicate a higher return per unit of voucher cost.

Both metrics are 0 when no sales have been generated through the voucher. On GET /vouchers/{id_voucher}/products the same formulas are applied per product (using that product's voucher fee and total sales).

Endpoint Reference

The following endpoints allow sellers to retrieve and manage vouchers.

Create Voucher

To create a new voucher, send a POST request to /vouchers. You must specify the discount type and amount, the validity period, the storefront, and either a list of product IDs or EANs the voucher applies to.

The discount_type can be PERCENTAGE or ABSOLUTE. For absolute discounts, provide the value in cents (e.g. 100 = 1 euro). The usage_limit defines the maximum number of redemptions across all participating products.

Note: Vouchers apply only to new products. Used products are not eligible: a voucher is never offered on a used-product PDP and does not discount used-condition units, even if their product ID or EAN is included in the voucher.
Vouchers are scoped per product, not per unit. Most SellerAPI endpoints operate on units (a seller's specific listing of an item), but a voucher created here applies to every new-condition unit owned by the calling seller whose item matches one of the provided products IDs or eans. There is no way to scope a voucher to a single unit.

Request fields

Field Required Allowed values / format Notes
title Yes Non-empty string Display name of the voucher.
storefront Yes Any currently-supported storefront code (see Storefronts and Locales). Exactly one storefront per voucher.
discount_type Yes PERCENTAGE, ABSOLUTE
discount_amount Yes Integer ≥ 1 For PERCENTAGE, max 85. For ABSOLUTE, value is in cents (e.g. 100 = 1 €).
begin_at Yes YYYY-MM-DD Must be today or later (cannot be in the past).
end_at Yes YYYY-MM-DD Must be today or later, and on or after begin_at. The same date can be used for begin_at and end_at to create a voucher that is active for today only.
usage_limit Yes Integer ≥ 1 Maximum total redemptions across all participating products.
products At least one of products or eans Array of product IDs (positive integers) Can be combined with eans; the voucher applies to the union of items resolved from both lists.
eans At least one of products or eans Array of EAN strings Can be combined with products. EANs that cannot be resolved to a product return 422.
export_to_third_parties No true or false (default false) Share the voucher with third-party price-comparison portals.

Example Request

{
    "title": "Christmas Sale",
    "storefront": "de",
    "discount_type": "PERCENTAGE",
    "discount_amount": 10,
    "begin_at": "2025-12-16",
    "end_at": "2025-12-20",
    "usage_limit": 100,
    "products": [306215652, 533036228],
    "eans": ["4006381333931"],
    "export_to_third_parties": false
}

Example Response

{
    "data": {
        // server-assigned unique voucher ID; use it to address the voucher in subsequent /vouchers/{id_voucher}* calls
        "id_voucher": 4,
        "title": "Christmas Sale",
        // lifecycle state: new | active | inactive | expired | consumed | deleted
        "status": "new",
        "storefront": "de",
        // PERCENTAGE or ABSOLUTE
        "discount_type": "PERCENTAGE",
        // for PERCENTAGE: integer 1–85 (percent off). For ABSOLUTE: amount in cents
        "discount_amount": 10,
        "begin_at": "2025-12-16",
        "end_at": "2025-12-20",
        // server-set creation timestamp (YYYY-MM-DD)
        "created_at": "2025-12-16",
        "usage_limit": 100,
        // whether the voucher is shared with third-party price-comparison portals (e.g. idealo, Google Shopping)
        "export_to_third_parties": false
    }
}

POST /vouchers — Possible Errors

HTTP Status Problem Type Cause Resolution
400 Bad Request /problems/validation-error One or more request fields failed validation. Possible reasons: title or storefront is empty; begin_at or end_at is not a valid YYYY-MM-DD date; begin_at or end_at is in the past; end_at is before begin_at; usage_limit is below 1; discount_amount is below 1; discount_type is PERCENTAGE and discount_amount exceeds 85; neither products nor eans is provided. Check the errors array in the response body — each entry contains the invalid field and a descriptive message.
400 Bad Request /problems/bad-request The server rejected the request due to a validation rule not enforced client-side (e.g. items list empty after processing). Check the errors array for field-level details returned from the backend.
401 Unauthorized /problems/unauthorized Authentication headers are missing or the request signature is invalid. Ensure the request is correctly signed. Refer to the authentication documentation.
422 Unprocessable Content /problems/bad-request One or more values in the eans list could not be resolved to a product. Check the message field for the specific EANs that failed to resolve, and verify they are valid and belong to your account.
422 Unprocessable Content /problems/action-not-allowed The Voucher Terms and Conditions have not been accepted for the specified storefront. Accept the Voucher Terms and Conditions for the storefront in the Seller Portal before creating vouchers.
503 Service Unavailable /problems/service-unavailable A downstream service is temporarily unavailable or timed out. Retry the request after a brief delay. Contact support if the issue persists.
500 Internal Server Error /problems/server-error An unexpected error occurred on the server side. Contact support if the issue persists.

Get Vouchers List

Use GET /vouchers to retrieve a paginated list of your vouchers. All query parameters are optional.

You can filter by one or more storefronts by passing storefront multiple times (e.g. ?storefront=de&storefront=cz). When omitted, vouchers across all storefronts are returned. Results can also be filtered by one or more status values (new, active, inactive, expired, consumed, deleted) — pass status multiple times to filter by several statuses (e.g. ?status=active&status=new). When omitted, vouchers of all statuses are returned. You can also filter by campaign name or ID using search_term, and sort results with sort=field:direction (e.g. ?sort=redemptions:desc).

To find vouchers that apply to a specific product, use id_product — pass the parameter multiple times to filter by several products (e.g. ?id_product=123&id_product=456). Alternatively, use ean to filter by EAN (e.g. ?ean=4006381333931&ean=4006381333948). Both parameters can be combined. When neither is provided, vouchers for all products are returned.

Use offset (number of vouchers to skip, default 0) and limit (1–100, default 30) to paginate through results.

Query parameters

Parameter Required Allowed values / format Notes
storefront No Any currently-supported storefront code (see Storefronts and Locales). Repeatable. When omitted, all storefronts are included.
status No new, active, inactive, expired, consumed, deleted Repeatable. When omitted, all statuses are included.
search_term No String, ≤ 255 characters Filters by campaign name or voucher ID.
id_product No Positive integer Repeatable. Can be combined with ean — vouchers matching any of the listed products or EANs are returned.
ean No Non-empty string Repeatable. Can be combined with id_product.
offset No Integer ≥ 0 (default 0) Must be a multiple of limit.
limit No Integer 1–100 (default 30)
sort No field:direction, where field is one of products, redemptions, beginAt, createdAt, totalSales, roas, acos, and direction is asc or desc. Example: ?sort=redemptions:desc. products sorts by the number of products attached to the voucher. See Performance Metrics for roas and acos.

Example Response

{
    "data": [
        {
            "id_voucher": 4,
            "title": "Christmas Sale",
            // lifecycle state: new | active | inactive | expired | consumed | deleted
            "status": "new",
            "storefront": "de",
            // PERCENTAGE or ABSOLUTE
            "discount_type": "PERCENTAGE",
            // for PERCENTAGE: integer 1–85. For ABSOLUTE: amount in cents
            "discount_amount": 10,
            "begin_at": "2025-12-16",
            "end_at": "2025-12-20",
            // server-set creation timestamp (YYYY-MM-DD)
            "created_at": "2025-12-16",
            "usage_limit": 100,
            "export_to_third_parties": false,
            // total redemptions across every product attached to this voucher
            "number_of_redeemed_vouchers": 0,
            // total fee paid by the seller for this voucher (in cents)
            "voucher_fee": 0,
            // total revenue generated through this voucher (in cents)
            "total_sales": 0,
            // see Performance Metrics
            "acos": 0,
            // see Performance Metrics
            "roas": 0,
            // number of products currently attached to the voucher
            "products_count": 2
        }
    ],
    // pagination cursor; total is the count of vouchers matching the filters, not the page size
    "pagination": {
        "offset": 0,
        "limit": 30,
        "total": 200
    }
}

GET /vouchers — Possible Errors

HTTP Status Problem Type Cause Resolution
400 Bad Request /problems/validation-error One or more query parameters failed validation. Possible reasons: offset is below 0; limit is outside 1–100; offset is not a multiple of limit; sort is not in the form field:direction or its field/direction is unrecognised; status contains an unrecognised value. Check the errors array in the response body for the specific invalid field and constraint.
401 Unauthorized /problems/unauthorized Authentication headers are missing or the request signature is invalid. Ensure the request is correctly signed. Refer to the authentication documentation.
422 Unprocessable Content /problems/bad-request One or more values in the ean list could not be resolved to a product. Check the message field for the specific EANs that failed to resolve, and verify they are valid and belong to your account.
503 Service Unavailable /problems/service-unavailable A downstream service is temporarily unavailable or timed out. When ean parameters are provided, this may also indicate that the EAN resolution service is temporarily unavailable. Retry the request after a brief delay. Contact support if the issue persists.
500 Internal Server Error /problems/server-error An unexpected error occurred on the server side. Contact support if the issue persists.

Get Voucher

To retrieve the full details and performance statistics of a specific voucher, use GET /vouchers/{id_voucher}. This endpoint returns voucher metadata only. To retrieve the associated products, use GET /vouchers/{id_voucher}/products.

Example Response

{
    "data": {
        "id_voucher": 4,
        "title": "Christmas Sale",
        // lifecycle state: new | active | inactive | expired | consumed | deleted
        "status": "new",
        "storefront": "de",
        // PERCENTAGE or ABSOLUTE
        "discount_type": "PERCENTAGE",
        // for PERCENTAGE: integer 1–85. For ABSOLUTE: amount in cents
        "discount_amount": 10,
        "begin_at": "2025-12-16",
        "end_at": "2025-12-20",
        // server-set creation timestamp (YYYY-MM-DD)
        "created_at": "2025-12-16",
        "usage_limit": 100,
        // total redemptions across every product attached to this voucher
        "number_of_redeemed_vouchers": 42,
        // total fee paid by the seller for this voucher (in cents)
        "voucher_fee": 5,
        // total revenue generated through this voucher (in cents)
        "total_sales": 1500,
        // see Performance Metrics
        "acos": 1.25,
        // see Performance Metrics
        "roas": 3.75,
        "export_to_third_parties": false
    }
}

GET /vouchers/{id_voucher} — Possible Errors

HTTP Status Problem Type Cause Resolution
401 Unauthorized /problems/unauthorized Authentication headers are missing or the request signature is invalid. Ensure the request is correctly signed. Refer to the authentication documentation.
404 Not Found /problems/not-found No voucher with the given id_voucher was found, or it does not belong to your seller account. Check that the voucher ID is correct and belongs to your account.
503 Service Unavailable /problems/service-unavailable A downstream service is temporarily unavailable or timed out. Retry the request after a brief delay. Contact support if the issue persists.
500 Internal Server Error /problems/server-error An unexpected error occurred on the server side. Contact support if the issue persists.

Get Voucher Products

To retrieve the paginated list of products associated with a specific voucher, use GET /vouchers/{id_voucher}/products. Use offset and limit to page through results. limit must be between 1 and 100 (default: 30). Results can be filtered by one or more product IDs using id_product — pass the parameter multiple times to filter by several products (e.g. ?id_product=111&id_product=222). Results can be sorted with sort=field:direction (e.g. ?sort=redemptions:desc). Allowed fields: redemptions, acos, roas. Allowed directions: asc, desc.

Each entry in the response carries the acos and roas metrics, computed per product. See Performance Metrics for the definitions and formulas.

Query parameters

Parameter Required Allowed values / format Notes
id_product No Positive integer Repeatable. When omitted, all products in the voucher are returned.
offset No Integer ≥ 0 (default 0) Must be a multiple of limit.
limit No Integer 1–100 (default 30)
sort No field:direction, where field is one of redemptions, acos, roas, and direction is asc or desc. Example: ?sort=redemptions:desc. See Performance Metrics for acos and roas.

Example Response

{
    "data": [
        // each entry: id_product (item ID), acos (see Performance Metrics),
        // roas (see Performance Metrics), number_of_redeemed_vouchers (redemptions on this product only)
        { "id_product": 306215652, "acos": 0.8, "roas": 4.1, "number_of_redeemed_vouchers": 12 },
        { "id_product": 533036228, "acos": 0, "roas": 0, "number_of_redeemed_vouchers": 0 }
    ],
    // pagination cursor; total is the count of products attached to the voucher matching the filters
    "pagination": {
        "offset": 0,
        "limit": 30,
        "total": 2
    }
}

GET /vouchers/{id_voucher}/products — Possible Errors

HTTP Status Problem Type Cause Resolution
400 Bad Request /problems/validation-error One or more query parameters failed validation. Possible reasons: offset is below 0; limit is outside 1–100; offset is not a multiple of limit; sort is not in the form field:direction or its field/direction is unrecognised; id_product contains a non-positive integer. Check the errors array for the specific invalid field and its constraint.
401 Unauthorized /problems/unauthorized Authentication headers are missing or the request signature is invalid. Ensure the request is correctly signed. Refer to the authentication documentation.
404 Not Found /problems/not-found No voucher with the given id_voucher was found, or it does not belong to your seller account. Check that the voucher ID is correct and belongs to your account.
503 Service Unavailable /problems/service-unavailable A downstream service is temporarily unavailable or timed out. Retry the request after a brief delay. Contact support if the issue persists.
500 Internal Server Error /problems/server-error An unexpected error occurred on the server side. Contact support if the issue persists.

Deactivate Voucher

To deactivate a list of vouchers and make them no longer visible to customers, send a PATCH request to /vouchers with a JSON body containing the voucher IDs and "status": "inactive". The voucher's status will be updated to inactive, and the updated vouchers will be returned in the response.

Note: Only vouchers currently in status new or active can be deactivated. Vouchers in any other status (inactive, expired, consumed, deleted) are rejected with 422. The transition is permanent: once a voucher is inactive it cannot be reactivated, and all subsequent legal transitions (expired) are driven by the system, not by the seller.

Request fields

Field Required Allowed values / format Notes
ids Yes Array of 1–100 positive integer voucher IDs All listed vouchers are updated atomically; if any ID does not belong to your account the request fails with 404.
status Yes inactive Target lifecycle status. Currently only inactive is supported (i.e. deactivation).

Example Request

{
    "ids": [4],
    "status": "inactive"
}

Example Response

{
    "data": [
        {
            "id_voucher": 4,
            "title": "Christmas Sale",
            // updated to `inactive` after a successful deactivation
            "status": "inactive",
            "storefront": "de",
            // PERCENTAGE or ABSOLUTE
            "discount_type": "PERCENTAGE",
            // for PERCENTAGE: integer 1–85. For ABSOLUTE: amount in cents
            "discount_amount": 10,
            "begin_at": "2025-12-16",
            "end_at": "2025-12-20",
            // server-set creation timestamp (YYYY-MM-DD)
            "created_at": "2025-12-16",
            "usage_limit": 100,
            "export_to_third_parties": false,
            // total redemptions across every product attached to this voucher
            "number_of_redeemed_vouchers": 0,
            // total fee paid by the seller for this voucher (in cents)
            "voucher_fee": 0,
            // total revenue generated through this voucher (in cents)
            "total_sales": 0,
            // see Performance Metrics
            "acos": 0,
            // see Performance Metrics
            "roas": 0,
            // number of products currently attached to the voucher
            "products_count": 2
        }
    ]
}

PATCH /vouchers — Possible Errors

HTTP Status Problem Type Cause Resolution
400 Bad Request /problems/validation-error The request body failed validation. Possible reasons: ids is missing, empty, or contains more than 100 entries; status is missing or is not inactive. Provide between 1 and 100 voucher IDs in the ids array, and set status to inactive.
401 Unauthorized /problems/unauthorized Authentication headers are missing or the request signature is invalid. Ensure the request is correctly signed. Refer to the authentication documentation.
404 Not Found /problems/not-found The provided voucher ID was not found, or does not belong to your seller account. Check that the voucher ID is correct and belongs to your account.
422 Unprocessable Content /problems/action-not-allowed The voucher's current status does not permit deactivation. Only new and active vouchers can be deactivated. Verify the voucher's current status before retrying.
503 Service Unavailable /problems/service-unavailable A downstream service is temporarily unavailable or timed out. Retry the request after a brief delay. Contact support if the issue persists.
500 Internal Server Error /problems/server-error An unexpected error occurred on the server side. Contact support if the issue persists.

Delete Vouchers

To permanently remove one or more vouchers, send a DELETE request to /vouchers with the voucher IDs passed as repeated id query parameters (e.g. ?id=1&id=2&id=3). A successful deletion returns HTTP 204 with no response body.

Note: Only vouchers with the current status new can be deleted. A voucher transitions to active automatically once its begin_at time is reached. To disable an active voucher, use the deactivate vouchers endpoint instead.

Query parameters

Parameter Required Allowed values / format Notes
id Yes Positive integer voucher ID Repeatable. Provide between 1 and 100 IDs in total. Every listed voucher must currently be in new status; otherwise the request fails with 404.

Example Request

DELETE /vouchers?id=1&id=2&id=3

Example Response

HTTP 204 No Content

DELETE /vouchers — Possible Errors

HTTP Status Problem Type Cause Resolution
400 Bad Request /problems/validation-error The id query parameter is missing, contains a non-positive value, or more than 100 IDs were provided. Provide between 1 and 100 voucher IDs as repeated id query parameters.
401 Unauthorized /problems/unauthorized Authentication headers are missing or the request signature is invalid. Ensure the request is correctly signed. Refer to the authentication documentation.
404 Not Found /problems/not-found One or more of the provided voucher IDs were not found, or do not belong to your seller account. Check that all voucher IDs are correct and belong to your account.
422 Unprocessable Content /problems/action-not-allowed The voucher's current status does not permit deletion. Only new vouchers can be deleted; once activated, a voucher can no longer be removed. Verify the voucher's current status before retrying.
503 Service Unavailable /problems/service-unavailable A downstream service is temporarily unavailable or timed out. Retry the request after a brief delay. Contact support if the issue persists.
500 Internal Server Error /problems/server-error An unexpected error occurred on the server side. Contact support if the issue persists.

Full endpoint documentation including all parameters and error codes is available under Vouchers.