# POWER API — power.no, power.dk, power.fi and power.se electronics prices, previous price, warehouse and per-store stock, EAN, specifications, price history and reviews

> Search the POWER catalogue of Norway, Denmark, Finland or Sweden by keyword and/or category, brand, price range, stock state, store (click & collect) or campaign, sorted by popularity, price, title, brand or rating. Each row: product id, title, brand, manufacturer SKU, category path, URL, image, price incl. and ex. VAT, previous price with the site's own campaign note, discount, campaigns, warehouse stock units and band, units in stores, click & collect store count, next delivery date, rating, review count, energy class, selling points. Plus the source's total and its facet counts (brands, categories, stores, stock, price range). One of `query`, `category`, `brand` or `campaign_id` is required.
> ReefAPI engine `power-no` · 6 endpoints · clean JSON, no scraping or browsers to manage.

## How to call
- **Endpoint:** `POST https://api.reefapi.com/power-no/v1/<action>` with a JSON body.
- **Auth:** header `x-api-key: <YOUR_REEFAPI_KEY>` — create one free (1,000 credits, no card): https://reefapi.com/signup
- **Response (every call):** `{ ok: boolean, data: ..., meta: { record_count, credits, ... }, error: { code, message } }` — branch on `ok`. Failed calls are free except verified SHEIN NOT_FOUND on product/detail and price (4 credits).
- **One key + one shared credit pool** across every ReefAPI API. Per-call credits are listed on each endpoint below.
- **Use it from an AI agent (MCP):** connect `https://api.reefapi.com/mcp` (remote streamable-http). Send the key as `Authorization: Bearer <key>`, or put it in the URL (`?key=<key>`) when the client has no header field, as ChatGPT does.

## Endpoints

### POST https://api.reefapi.com/power-no/v1/search — 2 credits
Search the POWER catalogue of Norway, Denmark, Finland or Sweden by keyword and/or category, brand, price range, stock state, store (click & collect) or campaign, sorted by popularity, price, title, brand or rating. Each row: product id, title, brand, manufacturer SKU, category path, URL, image, price incl. and ex. VAT, previous price with the site's own campaign note, discount, campaigns, warehouse stock units and band, units in stores, click & collect store count, next delivery date, rating, review count, energy class, selling points. Plus the source's total and its facet counts (brands, categories, stores, stock, price range). One of `query`, `category`, `brand` or `campaign_id` is required.

**Parameters:**
- `country` (enum, optional, default "no") — Which POWER store: no (power.no), dk (power.dk), fi (power.fi), se (power.se). Prices come in that country's currency. [one of: no, dk, fi, se]
- `query` (string, optional) — Search words as typed into the site's search box.
- `category` (string, optional) — Numeric category id, as a row's category_id / category_path or the `categories` action returns it (1862 = TV on power.no). An unknown id returns 0 rows.
- `brand` (string, optional) — Brand exactly as rows print it (Samsung, LG, Apple …); facets.brands lists the brands of the current result. An unknown brand returns 0 rows.
- `min_price` (number, optional) — Lowest price incl. VAT, in the country's currency.
- `max_price` (number, optional) — Highest price incl. VAT, in the country's currency.
- `stock` (enum, optional) — Only products in this stock state, as the site's own stock facet names it (facets.stock shows the counts). [one of: online, click_and_collect, incoming]
- `store` (string, optional) — Only products available for click & collect at this store, written exactly as the `stores` action / facets.stores prints the name.
- `campaign_id` (integer, optional) — Only products in this campaign (a row's campaigns[].campaign_id).
- `sort` (enum, optional, default "popularity") — popularity (the site's default), price_asc, price_desc, title, brand, rating (the site's own rating order, weighted by review count: 4.89 with 2,311 reviews ranks above 5.0 with 1). Price order follows the site's index and can place a freshly re-priced row out of order (1 of 24 in our measurement). [one of: popularity, price_asc, price_desc, title, brand, rating]
- `page` (integer, optional, default 1) — Result page. The source pages through at most its first 10,000 results (see last_page).
- `page_size` (integer, optional, default 24) — Rows per page (1-24).

**Returns:** results[]{product_id, title, brand, brand_id, manufacturer_sku, category_id, category, category_path[], url, image, country, currency, price, price_ex_vat, vat_pct, previous_price, previous_price_kind, previous_price_note, lowest_recent_price, lowest_recent_price_days, campaign_ends, campaign_badge, discount_amount, discount_pct, campaigns[], web_stock_status, warehouse_stock_units, store_stock_units, click_and_collect_store_count, next_delivery_date, next_delivery_confirmed, limited_quantity, can_add_to_cart, sale_starts_note, rating, review_count, energy_class, energy_label_url, product_fiche_url, warranty_months, variant_group, short_description, selling_points[]} + total, page, page_size, last_page, has_more, facets{brands, category_ids, stores, stock, price_range}

**Example request body:**
```json
{
  "query": "oled tv",
  "country": "no"
}
```

### POST https://api.reefapi.com/power-no/v1/product — 3 credits
Full record of one product in one country: everything a search row carries plus EAN, Club bonus amount, cheapest delivery price, full description, all specifications (grouped, with units), stock units per store with store names, variants (colour / size siblings with their ids), all images and videos.

**Parameters:**
- `product_id` (string, optional) — Product id exactly as a search row returns it in `product_id` (the number after /p- in the product URL; the same id on all four sites). A product URL is accepted too.
- `country` (enum, optional, default "no") — Which POWER store: no (power.no), dk (power.dk), fi (power.fi), se (power.se). Prices come in that country's currency. [one of: no, dk, fi, se]

**Returns:** {…every search row field, ean, vendor_id, club_bonus_amount, cheapest_freight_price, description, specs[]{name, group, value, values[], unit}, store_stock[]{store_id, store_name, city, stock_units}, stores_with_stock, store_stock_units_listed, variants[]{attribute, value, product_id, url, stock_status}, variant_product_ids[], images[], videos[], brand_page, outlet_offer_count}

**Example request body:**
```json
{
  "product_id": "4126338",
  "country": "no"
}
```

### POST https://api.reefapi.com/power-no/v1/price_history — 1 credit
The site's own price-change log for one product in one country: each date the price changed and the new price, newest first.

**Parameters:**
- `product_id` (string, optional) — Product id exactly as a search row returns it in `product_id` (the number after /p- in the product URL; the same id on all four sites). A product URL is accepted too.
- `country` (enum, optional, default "no") — Which POWER store: no (power.no), dk (power.dk), fi (power.fi), se (power.se). Prices come in that country's currency. [one of: no, dk, fi, se]
- `days` (integer, optional, default 90) — How many days back (1-365).

**Returns:** {product_id, country, currency, days, points[]{date, price}, lowest, highest, current}

**Example request body:**
```json
{
  "product_id": "4126338",
  "country": "no"
}
```

### POST https://api.reefapi.com/power-no/v1/reviews — 2 credits
Customer reviews of one product: rating, title, text, pros and cons, recommendation, language, author nickname, date, verified-purchase badge, helpful votes, photos — plus the rating distribution. Reviews are shared across the POWER sites; `language=local` keeps only the country's own language.

**Parameters:**
- `product_id` (string, optional) — Product id exactly as a search row returns it in `product_id` (the number after /p- in the product URL; the same id on all four sites). A product URL is accepted too.
- `country` (enum, optional, default "no") — Which POWER store: no (power.no), dk (power.dk), fi (power.fi), se (power.se). Prices come in that country's currency. [one of: no, dk, fi, se]
- `language` (enum, optional, default "all") — all (default) or local. [one of: all, local]
- `sort` (enum, optional, default "newest") — Review order. [one of: newest, oldest, highest, lowest, helpful]
- `page` (integer, optional, default 1) — Review page.
- `page_size` (integer, optional, default 10) — Reviews per page (1-50).

**Returns:** {product_id, total, average_rating, rating_distribution{1..5}, recommended_count, reviews[]{review_id, rating, title, text, pros, cons, recommended, language, author, submitted_at, verified_purchase, helpful_votes, photos[]}, page, page_size, has_more}

**Example request body:**
```json
{
  "product_id": "4126338",
  "country": "no"
}
```

### POST https://api.reefapi.com/power-no/v1/stores — 1 credit
The chain's stores in one country: store id, name (the value the search `store` filter takes), street, postal code, city, region, coordinates, phone, e-mail, opening hours for the coming days.

**Parameters:**
- `country` (enum, optional, default "no") — Which POWER store: no (power.no), dk (power.dk), fi (power.fi), se (power.se). Prices come in that country's currency. [one of: no, dk, fi, se]
- `city` (string, optional) — Only stores whose city, region or name contains this text.

**Returns:** stores[]{store_id, name, street, postal_code, city, region, lat, lng, phone, email, flagship, dealer, opening_hours[]{date, hours}} + total

**Example request body:**
```json
{
  "country": "dk"
}
```

### POST https://api.reefapi.com/power-no/v1/categories — 2 credits
The category tree of one country: category id (the value the search `category` filter takes), name, parent id, depth and URL.

**Parameters:**
- `country` (enum, optional, default "no") — Which POWER store: no (power.no), dk (power.dk), fi (power.fi), se (power.se). Prices come in that country's currency. [one of: no, dk, fi, se]
- `name` (string, optional) — Only categories whose name contains this text.

**Returns:** categories[]{category_id, name, parent_id, depth, url} + total

**Example request body:**
```json
{
  "country": "se"
}
```

## At scale
- **Volume:** 5M+ requests a day, measured at 60 requests a second across the fleet with no
  central bottleneck. Per-key limits are raised for high-volume accounts; volume pricing on request.
- **Missing a source:** tell us a site we do not cover and it becomes an engine. A customer asked
  for bestprice.gr on 21 Sep 2026 and it was in the catalog on 22 Sep.
- **Support:** 2 minute median time from a question in the live chat to the first answer. Setup
  help included, no support tier to buy.
- **One key, one credit pool** across every API. No per-site plans, no separate subscriptions.

## More
- Try it live, no code: https://reefapi.com/playground?engine=power-no
- Human docs page: https://reefapi.com/docs/power-no
- Overview page: https://reefapi.com/power-no-api
- Every ReefAPI API in one file (for your AI): https://reefapi.com/llms-full.txt
