# Copernic Pricing — 2Checkout Discovery Findings

Populated from a live control-panel walkthrough on **2026-07-08** (account `www.copernic.com`).
Secret Key deliberately **not** recorded here — Rian copies it straight into `wp-config`.

---

## TL;DR data model

> **UPDATE (buy-link confirmed 2026-07-08):** the widget targets the **CONSOLIDATED** products,
> where edition/term/users are all OPTIONS on ONE product — this is simpler than first thought and
> matches Phil's buy-link:
> - **CDS = `3WL7JRHV69`** with options **`TERM` × `EDITION_2` (Basic/Advanced/Elite) × `users`**
>   (verified: its default config is a 63-row matrix = 3 terms × 3 editions × 7 user-tiers).
> - **CSS = `5O61WPEHDR`** with options **`Number of users` × `Term`**.
> - The split `CDS_ADVANCED_1_YEAR`-style SKUs are legacy/alternate — **NOT** what the widget uses.
> - Example ConvertPlus link (from Phil):
>   `https://shop.copernic.com/checkout/buy?merchant=COPERNIC&tpl=default&prod=3WL7JRHV69&qty=1&opt=TERM:2Y,EDITION_2:advanced,users:5`
> - CDS current eStore-default config = "…Price 2025"; an inactive **"Copernic 2026"** config exists
>   (likely where Phil will enter per-country prices). **Widget must read the eStore-DEFAULT config
>   dynamically**, so it auto-picks up 2026 when Phil activates it.

- **Every price lives inside "pricing options," not a base product price.** All the eStore
  pricing configs are **"Without base price"** — the price is carried by the option tiers.
- **USD is entered by hand; the other 50 currencies are auto-converted by 2Checkout (FX).**
  (USD values are round — 44.99, 43.99… — the rest are non-round FX, shown greyed-out.)
- **All prices are NET** (tax added at checkout) — matches Phil's answer.
- **CDS and CSS are modelled differently** (this is the big one):
  - **CDS** = *edition × term are separate products* (`CDS_ADVANCED_1_YEAR`, …) + one **`Users`**
    *scale* option (enter a user count → interval price).
  - **CSS** = *one product* + two options: **`Number of users`** + **`Term`** (1/2/3 yr). Term is an
    option here, not a separate product.
  - **Extensions** = 8 flat standalone products.
- Each product has several pricing configs (a "2024", a "2026", non-eStore ones); the widget must
  always read the **eStore default** (the "…2026" configs).

---

## 1. Account & API essentials  🟡

- Merchant Code: `__________`  ← grab from **Integrations → Webhooks & API** (safe to record)
- Secret Key: ⛔ confirmed present under Integrations → Webhooks & API — copy to `wp-config` only.
- API keys page path: `webhooks_api.php` (Integrations → Webhooks & API)
- Test-order system enabled? ⬜ confirm at Setup → Ordering options
- Currencies: **51 total** (see §3). Default/base currency = **USD**.

---

## 2. Product catalog — all 22 products

### CDS — "Copernic Desktop & Cloud Search" (edition × term = separate products)
| Product | Code | ID |
|---|---|---|
| CDS (legacy base) | `3WL7JRHV69` | 39849321 |
| CDS Basic – 1 Year | `CDS_BASIC_1_YEAR` | 41027763 |
| CDS Basic – 2 Years | `CDS_BASIC_2_YEAR` | 52971601 |
| CDS Basic – 3 Years | `CDS_BASIC_3_YEAR` | 41033073 |
| CDS Advanced – 1 Year | `CDS_ADVANCED_1_YEAR` | 41033091 |
| CDS Advanced – 2 Years | `CDS_ADVANCED_2_YEAR` | 52971671 |
| CDS Advanced – 3 Years | `CDS_ADVANCED_3_YEAR` | 41033095 |
| CDS Elite – 1 Year | `CDS_ELITE_1_YEAR` | 41033101 |
| CDS Elite – 2 Years | `CDS_ELITE_2_YEAR` | 52971676 |
| CDS Elite – 3 Years | `CDS_ELITE_3_YEAR` | 41033112 |
| CDS 30-day Trial | `CDS30DAYTRIALCLIENT` | 43129440 |

- Editions: **Basic / Advanced / Elite**. Terms: **1 / 2 / 3 Years** (separate SKUs).
- Shared option group **`Users`** (type **Scale**, Required), intervals:
  `1-4, 5-25, 26-50, 51-100, 101-500, 501-1000, 1001-2000`.
  (Group is shared across ALL CDS edition/term products — edit once, affects all.)

### CSS — "Copernic Business Server Search" (one product + Term option)
| Product | Code | ID |
|---|---|---|
| Copernic Business Server Search | `5O61WPEHDR` | 34903323 |
| Copernic Business Server Search (1Y to 5Y) | `CSS5YEARSCUST` | 51698332 |
| Copernic Server Search 30-day Trial | `CSS30DAYTRIALCLIENT` | 40807953 |

- Options on the main product: **`Number of users`** (Required) + **`Term`** (Required).
- Number-of-users intervals (10): `1-3, 4-9, 10-29, 30-59, 60-99, 100-249, 250-499, 500-999, 1,000-1,999, 2,000-5,000`.
- Term values (3): **1 Year / 2 Years / 3 Years**.
- ⇒ Price matrix = 10 user-tiers × 3 terms × 51 currencies (30 rows in the config).

### Extensions — 8 flat products (the "extensions at the bottom of the pricing page")
| Extension | Code | ID |
|---|---|---|
| AutoCAD | `A457125A70` | 26547430 |
| IBM Notes | `4719706` | 4719706 |
| Image Text Recognition | `4719707` | 4719707 |
| Microsoft Outlook 365 | `JR6TREMIM6` | 34903147 |
| Photoshop | `8860125A98` | 26547379 |
| Visio | `3048FFBD58` | 26547181 |
| WordPerfect | `4719705` | 4719705 |
| Thunderbird & Eudora | `4719709` | 4719709 |

*(Extension pricing model — flat vs optioned — not yet opened; confirm in Step 1.)*

**Legacy/cruft to have Copernic confirm:** duplicate option groups ("Edition" ×2, "Extentions"
typo, "Users" ×2), a "Demo Eugen" test product, and the legacy base CDS `3WL7JRHV69`. We must
confirm **which product codes are the current live ones** the pricing page should point at.

---

## 3. Currencies (51)  ✅

USD *(base, hand-entered)* + auto-FX: EUR, GBP, RON, AUD, AED, ARS, BOB, BRL, BYN, CAD, CHF, CLP,
CNY, COP, CZK, DKK, DZD, EGP, HKD, HUF, ILS, INR, JOD, JPY, KES, KRW, KWD, MDL, MXN, NAD, NGN, NOK,
NZD, OMR, PEN, PLN, PYG, QAR, RSD, RUB, SAR, SEK, SGD, SYP, TND, TRY, TWD, UAH, UYU, VND, ZAR.

Decision for §8: which subset to expose in the widget's currency selector (51 is a lot).

---

## 4. Sample prices (validation set for Step 1)  🟡

**CDS Advanced – 1 Year, USD, net** (per user-interval; note it *declines* with volume):
| Users | USD |
|---|---|
| 1–4 | 44.99 |
| 5–25 | 43.99 |
| 26–50 | 42.99 |
| 51–100 | 41.99 |
| 101–500 | 40.99 |
| 501–1000 | 39.99 |
| 1001–2000 | 38.99 |

(EUR/GBP/etc. for these were auto-FX, e.g. 1–4 → €39.36 / £33.52 — non-round, confirming FX.)

---

## 5. Cart / checkout hand-off  🟡 (construct confirmed; verify value codes in Step 1)

- **Flow = ConvertPlus.** Branded checkout domain **`shop.copernic.com`**, `merchant=COPERNIC`.
- **Link construct (from Phil, matches the catalog):**
  `https://shop.copernic.com/checkout/buy?merchant=COPERNIC&tpl=default&prod=3WL7JRHV69&qty=1&opt=TERM:<term>,EDITION_2:<edition>,users:<count>`
  - Option GROUP codes: `TERM`, `EDITION_2`, `users` (CDS) · `Number of users` + `Term` group codes for CSS TBD.
  - Value codes from Phil's example: `2Y` (term), `advanced` (edition), `5` (users = raw count → scale maps it).
  - `users:5` passes the **actual number**, so the widget sends the user's real count; 2CO maps it to the interval.
- **Still to verify in Step 1 (context filled up before I could open every Edit-options modal):**
  the full set of value codes — TERM (1Y/2Y/3Y?), EDITION_2 (basic/advanced/elite?), and the CSS
  group + value codes. Easiest via the API `getPricingConfigurations` (returns all option + value
  codes) or the per-group Edit-options screens.
- Add `currency` param for currency, and confirm whether a return/approved URL is required per link.

---

## 6. Tax  ✅ — net prices, tax at checkout (confirmed on-screen: "Price is: Without taxes (Net)").

---

## 7. Site / infra  🟡 (unchanged — pending)
- Prod CDS + CSS pricing page URLs: `__________`
- Cloudflare proxied? — Copernic IT checking.

---

## 8. OPEN QUESTIONS surfaced by discovery (drive these in Step 1 / with Copernic)

1. **Per-seat or flat per tier — and how does quantity reach the cart?** Tier prices *decline*
   with volume (looks per-seat), but native multi-unit is OFF and "Units"=1. Build a sandbox
   buy-link for e.g. 10 users and see whether the cart charges 10×rate or 1×rate. **This decides
   whether the widget multiplies by user count.** Highest-priority unknown.
2. **USD + auto-FX vs hand-set per-country.** Reality (CDS Adv 1yr, CSS) is USD-manual + auto-FX,
   not per-country hand-set prices. Confirm intended model with Copernic. Affects caching (FX
   drifts → refresh cadence) and the "exact local price" expectation.
3. **CDS vs CSS topology differ.** Widget config must map selections two ways (CDS: edition+term→
   product code + `users` option; CSS: single product + `Number of users` + `Term` options).
   Confirms *one* configurable widget, but with more mapping config than "swap the products."
4. **Extensions:** flat-priced? shown in the same widget or a separate simple list?
5. **Which SKUs are live?** Rule out legacy/duplicate products before wiring the widget.
6. **Always read the eStore-default config** (the "…2026" ones); ignore non-eStore + dated configs.
7. **Renewal prices** exist separately — widget shows new-purchase price only? (assume yes.)
