Notino API

Notino prices for every size, the 30-day lowest price, EAN and reviews in 27 countries, one API

The Notino API turns notino.*, Europe's largest online perfume and cosmetics retailer, into clean JSON in four actions: search, product/detail, product/reviews and suggest.

no credit card1,000 free credits · instant API key · pay by card or crypto
Missing a Notino endpoint, or need a source we don't have yet?Contact us real people · same-day reply.
N
/notino/v1

4 active endpoints. Every call is 1 credit.

  • POST/notino/v1/search
  • POST/notino/v1/product/detail
  • POST/notino/v1/product/reviews
  • POST/notino/v1/suggest

What Notino endpoints does ReefAPI ship?

4 live read endpoints. Read-only data API: no writes, no account actions, no dashboard access on the target site.

4 endpoints

search

1 cr

Search a Notino storefront by keyword, or browse a category/brand page, with the site's own s…

required
optional
country, query, category, sort, page, filters, price_min, price_max, include_facets, include_sponsored, include_fallback_results

product/detail

1 cr

The full Notino product by product id, catalog master id or URL.

required
optional
country, product_id, catalog_master_id, url

product/reviews

1 cr

Customer reviews of a Notino product (the storefront's own reviews, in its language).

required
optional
country, product_id, catalog_master_id, url, sort, page, rating, with_images

suggest

1 cr

Notino autocomplete for a partial query.

required
query
optional
country

Every parameter, every allowed value →

Notino API

4 of 4 endpoints, ready to run

View docs ↗

One page of a Notino store: product and catalog id, brand, name, annotation, the price with price_basis (this variant or the cheapest shade), price per litre or 100 ml, voucher prices, rating and count, stock bucket, size or shade labels, category and image.

1 credit0 required · 9 optional
POST/notino/v1/search
ok509 ms · 24 records · sample
{
  "ok": true,
  "meta": {
    "api": "notino",
    "endpoint": "search",
    "mode": "live",
    "latency_ms": 508.5,
    "record_count": 24,
    "cache_hit": false
  },
  "data": {
    "results": [
      {
        "product_id": "16049655",
        "catalog_master_id": "807569",
        "master_id": "16049655",
        "product_code": "CHDSVGM_DSHG10",
        "master_product_code": "CHDSVGM_DSHG10",
        "title": "DIOR Sauvage Rasiergel für Herren 125 ml",
        "brand": "DIOR",
        "name": "Sauvage",
        "sub_name": null,
        "annotation": "Rasiergel für Herren 125 ml",
        "url": "https://www.notino.de/dior/sauvage-rasiergel-fuer-herren/p-16049655/",
        "price": 53.5,
        "currency": "EUR",
        "price_basis": "this_variant",
        "was_price": null,
        "discount_percent": null,
        "dual_price": null,
        "member_price": null,
        "unit_price": {
          "value": 428,
          "per_amount": 1,
          "per_unit": "l"
        },
        "voucher": null,
        "conditional_voucher": null,
        "discount_reason": null,
        "free_delivery": false,
        "is_new": false,
        "rating": null,
        "rating_count": null,
        "rating_scale": 5,
        "search_index_stock": "Last2",
        "variant_count": 1,
        "variants": [
          {
            "product_id": "16049655",
            "label": "125 ml",
            "colors": null
          }
        ],
        "category": {
          "kind": "Fragrances",
          "category": "Perfumes",
          "subcategory": "Perfumed cosmetics",
          "type": "After-shave Care"
        },
        "image": "https://cdn.notinoimg.com/list_2k/dior/3348901512619_01__240224.jpg",
        "is_pharmacy": false,
        "sponsored": false
      },
      {
        "product_id": "15676582",
        "catalog_master_id": "361339",
        "master_id": "15676518",
        "product_code": "CHDSVGM_AEDP20",
        "master_product_code": "CHDSVGM_AEDP10",
        "title": "DIOR Sauvage Eau de Parfum für Herren",
        "brand": "DIOR",
        "name": "Sauvage",
        "sub_name": null,
        "annotation": "Eau de Parfum für Herren",
        "url": "https://www.notino.de/dior/sauvage-eau-de-parfum-fuer-herren/p-15676582/",
        "price": 80.9,
        "currency": "EUR",
        "price_basis": "lowest_variant",
        "was_price": null,
        "discount_percent": null,
        "dual_price": null,
        "member_price": null,
        "unit_price": {
          "value": 890,
          "per_amount": 1,
          "per_unit": "l"
        },
        "voucher": null,
        "conditional_voucher": null,
        "discount_reason": null,
        "free_delivery": false,
        "is_new": false,
        "rating": 4.8,
        "rating_count": 74,
        "rating_scale": 5,
        "search_index_stock": "MoreThan20",
        "variant_count": 4,
        "variants": [
          {
            "product_id": "15676582",
            "label": "60 ml",
            "colors": null
          },
          {
            "product_id": "15971107",
            "label": "200 ml",
            "colors": null
          },
          {
            "product_id": "16187295",
            "label": "30 ml",
            "colors": null
          }
        ],
        "category": {
          "kind": "Fragrances",
          "category": "Perfumes",
          "subcategory": "Men’s perfumes",
          "type": "Eaux de Parfum"
        },
        "image": "https://cdn.notinoimg.com/list_2k/dior/3348901368254_01__260811.jpg",
        "is_pharmacy": false,
        "sponsored": false
      },
      {
        "product_id": "644505",
        "catalog_master_id": "263375",
        "master_id": "644505",
        "product_code": "CHDSVGM_DDST15",
        "master_product_code": "CHDSVGM_DDST15",
        "title": "DIOR Sauvage Deo-Stick ohne Alkohol für Herren 75 g",
        "brand": "DIOR",
        "name": "Sauvage",
        "sub_name": null,
        "annotation": "Deo-Stick ohne Alkohol für Herren 75 g",
        "url": "https://www.notino.de/dior/sauvage-deo-stick-fuer-herren-alkoholfrei/p-644505/",
        "price": 43.9,
        "currency": "EUR",
        "price_basis": "this_variant",
        "was_price": null,
        "discount_percent": null,
        "dual_price": null,
        "member_price": null,
        "unit_price": {
          "value": 585.33,
          "per_amount": 1,
          "per_unit": "kg"
        },
        "voucher": null,
        "conditional_voucher": null,
        "discount_reason": null,
        "free_delivery": false,
        "is_new": false,
        "rating": 5,
        "rating_count": 2,
        "rating_scale": 5,
        "search_index_stock": "MoreThan20",
        "variant_count": 1,
        "variants": [
          {
            "product_id": "644505",
            "label": "75 g",
            "colors": null
          }
        ],
        "category": {
          "kind": "Fragrances",
          "category": "Perfumes",
          "subcategory": "Perfumed cosmetics",
          "type": "Deodorants and antiperspirants"
        },
        "image": "https://cdn.notinoimg.com/list_2k/dior/3348901292276_01__200828.jpg",
        "is_pharmacy": false,
        "sponsored": false
      }
    ],
    "count": 24,
    "total_results": 28,
    "total_pages": 2,
    "page": 1,
    "page_size": 24,
    "sort": "relevance",
    "query": "dior sauvage",
    "category": null,
    "country": "de",
    "currency": "EUR",
    "page_title": "Suchergebnisse",
    "redirect_to": null,
    "related_categories": [
      {
        "name": "DIOR Sauvage",
        "url": "https://www.notino.de/dior/sauvage2015/"
      },
      {
        "name": "DIOR Eau Sauvage",
        "url": "https://www.notino.de/dior/eau-sauvage/"
      }
    ],
    "price_range": {
      "min": 0,
      "max": 1972
    },
    "sponsored_dropped": 0,
    "fallback_results_dropped": 0,
    "has_more": true
  }
}
Real response, fetched from the live endpoint with the parameters on the left — trimmed to the first few rows, with seller names left out. Press Try it for the untrimmed response.

How the Notino API works

Notino is a normal ReefAPI surface — the same four rules that hold for every other engine on the key.

01
Authenticate
x-api-key header

No OAuth app, no request signing, no per-site account. One key covers all 252 engines.

02
Call
POST /notino/v1/…

Every route is a POST with a JSON body. Parameters are validated against the published schema before anything is charged.

03
Pay
1 credit per call

Credits, not seats. Failed and blocked calls are never charged, and cache hits cost nothing.

04
Read
{ ok, data, meta, error }

One envelope everywhere. meta carries latency_ms, record_count and the endpoint that answered.

Search a store, open the product, read its reviews

A search row is one product with its price_basis. product/detail opens every size or shade with its own price and EAN; product/reviews reads what that country's customers wrote.

01search
POST/notino/v1/search
{"country": "de", "query": "dior sauvage", "sort": "price_asc"}

24 rows in price order, each with price, price_basis, unit price and voucher prices. Take results[].product_id.

02detail
POST/notino/v1/product/detail
{"country": "de", "product_id": "<results[0].product_id>"}

Every size with its own price, was-price and type, 30-day lowest price, EAN, stock, and the delivery dates.

03reviews
POST/notino/v1/product/reviews
{"country": "de", "product_id": "<results[0].product_id>", "sort": "most_helpful"}

Reviews with stars, pros and cons, and the rating histogram.

One flat credit each, with every price field kept apart and the grouped-row price labelled.

request
curl -X POST https://api.reefapi.com/notino/v1/search \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"country":"de","query":"dior sauvage"}'
response envelope
{
  "ok": true,
  "data": { … },
  "meta": {
    "api": "notino",
    "endpoint": "search",
    "mode": "live",
    "latency_ms": …,
    "record_count": …
  },
  "error": null
}

A Notino price has four neighbours, and a grouped row shows the cheapest shade

A Notino product commonly publishes the price, a struck was-price with a type (supplier recommended price, a recommended price converted from another currency, or the highest price of the last two years), the EU-mandated lowest price of the last 30 days, and one or two voucher prices. The API keeps every one in its own field. On search, a product with many shades is one row whose price is its cheapest shade, so price_basis tells you which kind of price you are reading.

Product (country)pricewas_price (type)lowest_price_30dvoucher / unit
Max Factor Colour Elixir, shade 125 (DE)6.1010.10 (Converted)4.70search row shows 4.70 = cheapest of 20 shades
Dior Sauvage EDP 60 ml (DE)84.50null79.001,408.33 €/l
Dior Sauvage EDP 100 ml (CZ)2,950 Kčnull2,601 Kč2,950 Kč/100 ml
YSL Rouge Pur Couture, shade 321 (DE)51.5060.00 (Recommended)39.00voucher 'promo': 36.05

lowest_price_30d is the EU-Omnibus figure and is separate from was_price. voucher is a code price anyone can use; conditional_voucher applies only when the basket reaches a minimum and lists that minimum. Neither is ever returned as price. The unit basis is the store's own (per litre in Germany, per 100 ml in Czechia). No member (Notino Club) price is published to a logged-out visitor, so member_price is null.

Which countries, which price, and what a search row does not carry

27 storefronts on one platform. Measured on 2026-09-15: a search and a full product in each of the 27 countries, 16 products in 5 categories against the raw data, 7 products against the store's own product page, and every error case. Some of these lines go against us.

Twenty-seven countries, each in its own currency

DE, AT, CH, CZ, SK, PL, HU, RO, BG, HR, SI, GR, IT, ES, PT, FR, BE, NL, UK, IE, DK, SE, FI, LT, LV, EE, UA: one country parameter, and the currency follows it (EUR, CZK, PLN, HUF, RON, GBP, DKK, SEK, CHF, UAH). Product ids are shared across stores; reviews and prices are each store's own.

Every price in its own field

price; was_price with was_price_type (Recommended, Converted or HistoricalMax) and discount_percent; lowest_price_30d (the EU 30-day figure); unit_price per litre or 100 ml as the store states it; voucher (a code price anyone can use); conditional_voucher (only above a basket minimum). No member price is published to logged-out visitors, so member_price is null.

Grouped rows are labelled

A product sold in many shades or sizes is one search row whose price is the cheapest variant, marked price_basis 'lowest_variant'. On 24 of 24 checked rows that price was exactly the cheapest variant; product/detail gives every variant's own price.

Redirects followed, padding and ads removed

A keyword the store maps to a brand or category is followed and reported in redirect_to. A keyword with no real match returns empty (the store's filler products are counted in fallback_results_dropped), and paid placements on category pages are removed and counted in sponsored_dropped.

Checked against the store's own page

On 7 of 7 products the price, brand, name, availability and rating equalled the store's product page; on 16 products the parsed values equalled the raw data with 0 mismatches; a non-grouped search row's price equalled the product price 6 of 6 times.

Against us: the was-price and EAN are only on the detail

Notino does not publish the struck price or the EAN on listing rows, so search returns was_price null and no EAN. product/detail carries both for every variant.

Against us: price_desc is ordered by the most expensive variant

The store sorts price_desc by each product's dearest size or shade while a grouped row shows its cheapest, so the visible prices are not strictly falling (the response says so in sort_note). Relevance ranking also stops near 500 results per keyword; the other sorts return the full set.

What people build with Notino

The jobs this data is most often used for.

4

endpoints

1

credit per call

01

Beauty price-monitoring teams track each size's price, the was-price and its type, the EU 30-day lowest price and the price per litre across 27 countries from one API.

02

Brands check where their perfumes and cosmetics are listed, at what price per country, and which voucher or gift runs on them.

03

Catalog and marketplace teams match products by EAN and pull ingredients, characteristics and every shade or size variant.

04

Review analytics tools read the stars, pros and cons and verified flags of the same product in different countries.

What Notino data costs

The cheapest call here is 1 credit, so $15/mo (Pro) buys 10,000 of them — $1.50 per 1,000 credits. Credits roll over and never expire, and failed or blocked calls are not charged.

Full pricing →
$0.67–$1.50 / 1,000 credits
  • 1,000 free credits on signup, no card
  • One key, all 252 APIs, one credit pool
  • Failed and blocked calls are never charged
  • Credits roll over and never expire

Call it in two lines

Sign up, get 1,000 credits and one key that works on every engine. Then this is the whole protocol.

curl
curl -X POST https://api.reefapi.com/notino/v1/search \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"country":"de","query":"dior sauvage"}'
python
import requests

r = requests.post(
    "https://api.reefapi.com/notino/v1/search",
    headers={"x-api-key": REEF_KEY},
    json={
  "country": "de",
  "query": "dior sauvage"
},
)
print(r.json()["data"])
FAQ

Have a question? We got answers.

The questions people actually ask before wiring up Notino.

Get a free key →
Which countries does it cover, and what currency comes back?

All 27 Notino storefronts on the shared platform: Germany, Austria, Switzerland, Czechia, Slovakia, Poland, Hungary, Romania, Bulgaria, Croatia, Slovenia, Greece, Italy, Spain, Portugal, France, Belgium, Netherlands, United Kingdom, Ireland, Denmark, Sweden, Finland, Lithuania, Latvia, Estonia and Ukraine. Pass country; the currency follows it (EUR, CZK, PLN, HUF, RON, GBP, DKK, SEK, CHF, UAH) and the text comes in the store's language. Product ids are the same in every store, so one product can be read in several countries. notino.com (the country picker) and notino.ru are not shops and return MARKET_UNAVAILABLE.

What does a search row's price mean?

price_basis says it. 'this_variant' is the price of that exact size or shade. 'lowest_variant' marks a product grouped over many shades or sizes, where the row shows the cheapest one; product/detail returns every variant with its own price. Search rows do not carry the was-price (the store does not publish it on listings), but they do carry the unit price and the voucher prices.

Why does sort=price_desc not look sorted?

Notino orders price_desc by each product's most expensive size or shade, while a grouped row shows its cheapest one, so the visible prices are not strictly falling. The response says so in sort_note. price_asc orders by the cheapest variant and is monotone.

What are was_price_type, lowest_price_30d, voucher and conditional_voucher?

was_price_type says what the struck price is: Recommended (the supplier's recommended price), Converted (a recommended price converted from another currency) or HistoricalMax (the highest price of the last two years). lowest_price_30d is the lowest price of the 30 days before a promotion, as EU rules require. voucher is a code price anyone can use (for example code 'promo': 51.50 becomes 36.05). conditional_voucher applies only above a basket minimum and lists that minimum, the discount and the categories it covers.

What happens on a no-result search or a keyword that is really a brand?

A keyword the store maps to a category or brand page (for example 'nivea' or 'parfum') is followed, its real products are returned, and redirect_to reports where it went. When nothing matches, Notino fills the page with bestsellers or unrelated products; the API returns an empty result and counts what it dropped in fallback_results_dropped (include_fallback_results=true returns them separately).

Are sponsored products mixed into the results?

Category pages contain paid placements inside the product list. They are removed by default and counted in sponsored_dropped, so count is the organic count; include_sponsored=true returns them with sponsored: true.

What do reviews include?

product/reviews returns the store's own reviews in its language: title, text, star rating, date, verified flag, likes and dislikes, pros and cons, customer photos, the reviewed variant, and the rating histogram. Sort by newest, oldest, rating or most helpful, filter by stars or photos; 8 reviews a page. Review counts differ by country because each store collects its own.

What is the Notino API?

Notino API is a ReefAPI endpoint group for europe's largest online perfume and cosmetics shop in 27 countries: every size's price, price per litre, 30-day lowest price, ean and reviews as json. It returns live JSON through POST requests under /notino/v1.

Is the Notino API free to try?

Yes. ReefAPI starts with 1,000 free credits, no card required. Notino calls use the same shared credit balance as every other ReefAPI engine.

Do I need a Notino login or account?

No login to Notino is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.

How fresh is the Notino data?

The page example is captured from a live search call, and production requests fetch live data through ReefAPI rather than a static sample.

How many credits does the Notino API use?

Notino actions currently cost 1 credit per successful call. Failed or blocked calls are free, and all APIs draw from one credit pool.

Can I call Notino from an AI assistant or MCP client?

Yes. Connect ReefAPI once through MCP and your assistant can call notino actions with the same key, credit pool and JSON envelope used by normal REST requests.

Is the Notino API a Notino scraper?

It is the managed alternative to a DIY Notino scraper. Instead of building and maintaining your own scraper — proxies, headless browsers, captcha and constant breakage — you call one ReefAPI endpoint and get the same europe's largest online perfume and cosmetics shop in 27 countries: every size's price, price per litre, 30-day lowest price, ean and reviews as json back as clean JSON.

91 E-commerce & Marketplaces APIs on the same key

One key, one credit pool, one response envelope. If you are pulling Notino, you are one call away from the rest of the category — no second contract, no second integration.

Need something this API does not do?

Name the endpoint, the field, or a source we do not carry yet. We ship new APIs every week and you would be first to get the key. Real people read every message and reply the same day.

0/4000

No account needed · we reply from [email protected]

Try it on your own data before you pay anything

The call above is the real endpoint, not a recording. A free key gives you 1,000 credits, the other 251 APIs, and the same envelope everywhere.

Endpoints, parameters and credit costs on this page are read from the live catalog and cannot drift from what the API accepts. Field notes were captured on 2026-09-15.