iolo Sitemap [iolo_sitemap]

DETECTED VALUES:

Query coupon: –

SIC cookie: –

SIC decoded (coupon | segmentid): –

segmentid cookie: –

SN cookie: –

Effective coupon (non-UPD): – (–)

Effective coupon (UPD): –

All cookies: –

PRICING WIDGET — API DETAILS 9 sections — endpoint, request/response, coupons, tiers, product map, failure modes, known gaps

Reference for how this page (and every priceCodes page) gets its prices. Mirrors the WordPress plugin iolo_pricingWG (inc/class-iolo-pricing.php, inc/class-iolo-api-client.php), reimplemented client-side because the Astro site is prerendered.

1. Endpoint & transport

ServiceSOAP 1.1, svc.iolo.com/__svc/priceinfo/priceinfoservice.asmx (11 operations in the WSDL; we use 2)
Called fromThe browser, from an is:inline script in <head> — fetches start before the body parses
localhostSame-origin /__svc/…, forwarded by the Vite dev proxy (localhost is not CORS-allowlisted)
www / stage1Direct to https://svc.iolo.com — CORS is live for both origins (POST, OPTIONS; content-type, soapaction)
OverridePUBLIC_PRICING_SOAP_URL env var replaces the base for any other environment
ReplacesWP’s 3-way routing (IOLO_USE_SOAP / IOLO_USE_PPG / IOLO_FORCE_PPG). Prod runs SOAP-only, so Astro implements only that path.

2. Request shape

One POST per product, deduplicated by GUID + coupon. Header SOAPAction: "http://tempuri.org/<method>", 3.5s abort timeout.

POST /__svc/priceinfo/priceinfoservice.asmx
Content-Type: text/xml; charset=utf-8
SOAPAction: "http://tempuri.org/GetStickyPricingInfoItem"

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <GetStickyPricingInfoItem xmlns="http://tempuri.org/">
      <productID>5488CB36-BE62-4606-B07B-2EE938868BD1</productID>
      <couponCode>iolo20</couponCode>
    </GetStickyPricingInfoItem>
  </soap:Body>
</soap:Envelope>

UPD is the exception. GetStickyPricingInfoItem answers Code -1 “PriceItemInfo not found” for the Updater GUID. It is served instead by GetStickyPricingInfoItemFromStickyProduct with avProductID=298 plus locale=en_US and currency=USD — same response fields, and the same substitution the WP client makes. That call returns UPD1Y1 at $34.99 / $19.99 (43% off).

3. Response shape

Flat XML, prefixed per tier — Purchase…, Upgrade…, Renew… — wrapped in <Code> / <Message>.

FieldParsed asRendered by
{tier}ItemIditem_idDiagnostics only
{tier}ItemCodeitem_codeDiagnostics only — a SKU, not the cart’s ock
{tier}RegularPriceregular_pricedata-live-normal
{tier}SavePricesave_pricedata-live-price
{tier}SaveAmountsave_amountdata-live-save
{tier}SavePercentsave_percentdata-live-percent
Code / Messagecode / messageGate: anything other than 0 falls back to static prices

Never build a cart link from item_code. Cart offers are chosen by the ock key, which lives in src/data/cart-links.ts and is copied verbatim from production. The two disagree by design: SM’s item_code IOLO_SMSTD_1Y-V2024 loads a $55.94 no-LiveTech cart, while the ock sms-1y-ltc-1m-v2024 loads the $43.94 bundle the API is quoting.

4. DOM hooks

AttributeReceivesIf the API fails
data-live-price="CODE"Sale price (tier SavePrice)Static snapshot price stays
data-live-normal="CODE"Regular price (tier RegularPrice), inside the struck-out <s>Whole “Normally…” wrapper is hidden when there is no discount
data-live-save="CODE"“Save $X” (tier SaveAmount)Hidden when there is no discount
data-live-percent="CODE"“N% OFF” (tier SavePercent, rounded)Hidden when there is no discount
data-live-raw="CODE"Full parsed response as JSON (this page only)Prints the failure reason instead

5. Coupon resolution

  1. ?coupon= in the URL — exact lowercase key wins, any other casing accepted as a fallback.
  2. SIC cookie — base64 of coupon|segmentid, tolerant of the URL-safe alphabet (- _ , → + / =); a coupon of none counts as absent. Seeded by /coupon/<code>/<path>/ URLs.
  3. Default iolo20 for the API call. Cart links are not given a default at runtime — they simply keep the coupon they were authored with, which is the same iolo20.

UPD overrides this: ?coupon= still wins, but the SIC cookie is ignored and the default is upd15. The same coupon is sent to the API and written onto the cart link, so the quoted price and the cart agree.

The default is not cosmetic: an empty couponCode returns the undiscounted price ($54.95 / $54.95 for System Mechanic). WordPress never sends one either — mu-plugins/iolo-varnish-compat.php injects SIC = base64(“iolo20|None”) when the cookie is missing, carrying over the old Varnish VCL default, which is exactly what iolo20 reproduces here.

6. Tier selection & buy-URL branches

The segmentid cookie (set by the /cookie-init/ infra endpoint from ?sn= / ?isc= / ?sc=) decides which tier is read and where the CTA points.

StatesegmentidPrice tierCTA target
RENEW011 021 SM · 010 020 SMP · 009 019 SMU · 008 018 P360 · 111 121 PG · 112 122 MK · 113 123 BP · 013 023 SMB · 114 124 UPDRenew tier/purchase/SubscriptionExtend.aspx?sn=…
UPGRADE030 040 050 060 066 067 073 160 162 163Upgrade tier/purchase/upgrade.aspx?sn=…
PURCHASE999 998 065, or no segmentid cookie at allPurchase tiersecure1 cart with the page’s static ock

Renew and upgrade both need a decoded SN cookie; without one the CTA falls back to /purchase/UpgradeHelpStartJump.aspx. Owning the product being viewed reads the Renew tier; owning a different one reads Upgrade.

SN and SIC are both base64 in the plugin’s URL-safe alphabet — Helper.php’s base64_url_encode maps + / = to - _ ,, so all three substitutions must be reversed before decoding. A serial whose base64 carries padding otherwise fails to decode and silently downgrades the renewal CTA.

7. Product mapping

CodeProductGUID (productID)Sticky idStatic ockFallback reg / sale
UPD Updater D8F85E47-5164-4358-8F74-E0F527AF642A – upd-1y-ltc-1m $34.95 / $19.95
SM System Mechanic 5488CB36-BE62-4606-B07B-2EE938868BD1 288 sms-1y-ltc-1m-v2024 $49.95 / $39.95
SMP System Mechanic Professional 68B717EE-E309-41DF-8D19-F82B1E591419 289 smp-1y-ltc-1m-v2024 $69.95 / $59.95
P360 System Mechanic Ultimate Defense A50DE83F-EFEC-48D0-B4DC-3E98620FC509 290 smu-1y-ltc-1m-v2024 $99.95 / $99.95
PG Privacy Guardian 1E38E75F-AC2C-4B27-ADA5-C0EA08862383 285 pg-1y-v2024 $34.95 / $34.95
MK Malware Killer A852BE1C-512F-49B9-A420-541AA6FB2FEB 284 mk-1y-v2024 $24.95 / $24.95
BP ByePass EED7C0B1-1E12-4709-AB58-2551B1243F42 282 bp-1y-v2024 $19.95 / $19.95
SMB System Mechanic Business 34727AC2-C35B-4F3D-8942-A23A4FFC80DF – smb3-1y –
SS System Shield 882362E0-C71A-411B-B16F-46D1B66E1890 287 ss-1y-v2024 $39.95 / $31.95
SR Search & Recover 882362E0-C71A-411B-B16F-46D1B66E1890 286 sr-1y-v2024 $39.95 / $31.95
DS DriveScrubber 36ED6646-A91F-4078-8781-9F2EB056D706 283 ds-1y-v2024 $29.95 / $23.95

Cart URL built from these: https://secure1.iolo.com/sm/carts/?view=1.10.13&ock=sms-1y-ltc-1m-v2024&coupon=iolo20 — host, view and ock are authored; only coupon is rewritten at runtime (plus secure1 → sb-secure1 off production).

  • Search & Recover shares System Shield’s GUID, so it is quoted at System Shield’s price. The WP plugin maps it the same way — faithful, not a typo.
  • UPD and SMB have no sticky id, and UPD’s GUID is never actually sent — that product is priced through avProductID=298. It is listed here only because the catalog carries it.
  • SMB carries no catalog fallback — its own page ships a snapshot price instead, so the dash above is expected.
  • The cart.smu key holds the Ultimate Defense offer (WP’s P360). WP’s separate SMU offer smu-1y-v2024 has no Astro entry because no page sells that edition.

8. Failure behaviour

  • Price elements are hidden by an injected style until their response lands, so a price never visibly changes.
  • Any failure — network error, non-zero Code, zero prices, 3.5s timeout — reveals the build-time snapshot price instead.
  • A 4s watchdog reveals everything regardless, so a hung service cannot leave the page priceless.
  • With JavaScript off nothing is ever hidden, and the static prices and cart links stand on their own.
  • A coupon that does not apply to a product returns SaveAmount 0; the price shows alone and the “Normally / Save” pair is dropped, matching production.

9. Known gaps vs the WordPress plugin

verified — no action The iolo20 default is load-bearing, and it is the platform default

An empty couponCode is not harmless: System Mechanic comes back $54.95 / $54.95, SaveAmount 0. WordPress never sends one because mu-plugins/iolo-varnish-compat.php injects SIC = base64(“iolo20|None”) in memory whenever the cookie is absent — the same default the Varnish VCL used (aW9sbzIwfE5vbmU=). Astro’s hardcoded iolo20 reproduces that edge default rather than inventing one.

What to do: None. Just never let the default fall out — a missing coupon quotes list price.

breaks parity — needs a decision Upgrade-segment visitors are quoted the Purchase tier

The ten UPGRADE segments (030 040 050 060 066 067 073 160 162 163) have no entry in the pricing script’s ownership map, so tier selection falls through to purchase — while CartLinks does know them and sends the same visitor to upgrade.aspx. WordPress derives both from one license_state, so it quotes the Upgrade tier. The two tiers are identical for every product we sampled, so nothing is visibly wrong today, but the logic is inconsistent with our own CTA.

What to do: Decide whether upgrade segments should read the Upgrade tier; if so, mirror <code>CartLinks</code>’ segment list into the pricing script.

breaks parity — needs a decision Tier is chosen per request in WordPress, per product here

WordPress derives one license_state from the segmentid cookie and applies that tier to every price on the page. Astro compares the owned product to each rendered code instead. Concretely, a System Mechanic owner (011) on /products/system-mechanic/ sees Renew pricing on all three editions under WordPress, but Renew on SM and Upgrade on Pro / Ultimate Defense here.

What to do: Confirm the intended commercial behaviour with the commerce team, then align one side. Ours is the more granular model, but it is not what WordPress does.

breaks parity — needs a decision A ?coupon= does not survive navigation

WordPress turns ?coupon= into a 30-day SIC cookie on any page load, so the coupon follows the visitor through the site. Astro only persists a coupon from the /coupon/<code>/<path>/ URL form; a plain ?coupon= applies to the landing page and is then lost on the next click. This is separate from the query-param forwarding that was deliberately removed — WordPress uses a cookie, not URL rewriting.

What to do: Confirm the intent. If coupons should stick, write the SIC cookie from <code>?coupon=</code> (cookie only, no URL changes).

check before shipping The rewritten WP class defaults an unknown visitor to segment 050

class-iolo-pricing.php falls back to SegmentID::NON_SM (050) when no segmentid cookie exists, which resolves to UPGRADE and rewrites every CTA to /purchase/UpgradeHelpStartJump.aspx. Live production does the opposite: an anonymous visitor gets the ordinary secure1 cart (verified on /products/system-mechanic/, where the only UpgradeHelp links are static nav items). Astro follows production — no segmentid cookie means PURCHASE and a normal cart link.

What to do: Flag to whoever owns that rewrite; as written it would push anonymous buyers out of the cart.

intentional Locale & currency are USD-only in practice

The WP class carries full country→locale→currency maps, but a non-USD request to this SOAP service answers Code -1 “PriceItemInfo not found” (verified with locale=en_GB, currency=GBP). Non-USD pricing lives in the PPG path, which prod has switched off (IOLO_USE_PPG=false). Astro therefore sends no locale or currency at all.

What to do: No action. Revisit only if PPG is ever enabled.

do not switch The REST source returns a different (older) catalog

GET api.iolo.com/pricinginfoapi/Pricing/StickyProductProperties/sm answers IOLO_SMSTD_1Y at $49.95/$39.95, while the SOAP service answers IOLO_SMSTD_1Y-V2024 at $54.95/$43.94 — the SOAP numbers are the ones live on iolo.com. Prod runs IOLO_USE_SOAP=true for exactly this reason. The REST host also sends no CORS headers.

What to do: Keep using SOAP. Do not “modernise” to the REST endpoint without a catalog fix on the API side.

behavioural No server-side response cache

WP caches every response in a WordPress transient for 2 hours and can prefetch all products in one parallel curl_multi batch. A static site has no server to cache on: each visitor’s browser makes its own calls (deduplicated per GUID+coupon within a page load).

What to do: Acceptable today. If svc.iolo.com load becomes a concern, add a CDN-cached JSON snapshot endpoint.

no impact Apex domain is not CORS-allowlisted

svc.iolo.com echoes an allow-origin for https://www.iolo.com and https://stage1.iolo.com only — not for https://iolo.com. The apex 301-redirects to www before any page script runs.

What to do: No action.

intentional GeoIP header is not consumed

WP reads nginx’s HTTP_X_COUNTRYNAME to pick a locale server-side. Astro pages are prerendered, so there is no request to read it from.

What to do: No action while pricing is USD-only.

IOLO UPDATOR:

Short code: UPD

Product name: Updater

Product ID (GUID): D8F85E47-5164-4358-8F74-E0F527AF642A

Sticky ID: –

Static ock (cart-links.ts): upd-1y-ltc-1m

Fallback prices: $34.95 regular / $19.95 sale

Price: $34.95

SaveAmt:

SavePct:

SavePrice: $19.95

Buy: https://secure1.iolo.com/sm/carts/?view=1.10.13&ock=upd-1y-ltc-1m&coupon=upd15

API return data:

waiting for API response…

SYSTEM MECHANIC:

Short code: SM

Product name: System Mechanic

Product ID (GUID): 5488CB36-BE62-4606-B07B-2EE938868BD1

Sticky ID: 288

Static ock (cart-links.ts): sms-1y-ltc-1m-v2024

Fallback prices: $49.95 regular / $39.95 sale

Price: $49.95

SaveAmt:

SavePct:

SavePrice: $39.95

Buy: https://secure1.iolo.com/sm/carts/?view=1.10.13&ock=sms-1y-ltc-1m-v2024&coupon=iolo20

API return data:

waiting for API response…

SYSTEM MECHANIC PROFFESSIONAL

Short code: SMP

Product name: System Mechanic Professional

Product ID (GUID): 68B717EE-E309-41DF-8D19-F82B1E591419

Sticky ID: 289

Static ock (cart-links.ts): smp-1y-ltc-1m-v2024

Fallback prices: $69.95 regular / $59.95 sale

Price: $69.95

SaveAmt:

SavePct:

SavePrice: $59.95

Buy: https://secure1.iolo.com/sm/carts/?view=1.10.13&ock=smp-1y-ltc-1m-v2024&coupon=iolo20

API return data:

waiting for API response…

SYSTEM MECHANIC ULTIMATE DEFENSE

Short code: P360

Product name: System Mechanic Ultimate Defense

Product ID (GUID): A50DE83F-EFEC-48D0-B4DC-3E98620FC509

Sticky ID: 290

Static ock (cart-links.ts): smu-1y-ltc-1m-v2024

Fallback prices: $99.95 regular / $99.95 sale

Price: $99.95

SaveAmt:

SavePct:

SavePrice: $99.95

Buy: https://secure1.iolo.com/sm/carts/?view=1.10.13&ock=smu-1y-ltc-1m-v2024&coupon=iolo20

API return data:

waiting for API response…

PRIVACY GUARDIAN:

Short code: PG

Product name: Privacy Guardian

Product ID (GUID): 1E38E75F-AC2C-4B27-ADA5-C0EA08862383

Sticky ID: 285

Static ock (cart-links.ts): pg-1y-v2024

Fallback prices: $34.95 regular / $34.95 sale

Price: $34.95

SaveAmt:

SavePct:

SavePrice: $34.95

Buy: https://secure1.iolo.com/sm/carts/?view=1.10.13&ock=pg-1y-v2024&coupon=iolo20

API return data:

waiting for API response…

MALWARE KILLER:

Short code: MK

Product name: Malware Killer

Product ID (GUID): A852BE1C-512F-49B9-A420-541AA6FB2FEB

Sticky ID: 284

Static ock (cart-links.ts): mk-1y-v2024

Fallback prices: $24.95 regular / $24.95 sale

Price: $24.95

SaveAmt:

SavePct:

SavePrice: $24.95

Buy: https://secure1.iolo.com/sm/carts/?view=1.10.13&ock=mk-1y-v2024&coupon=iolo20

API return data:

waiting for API response…

BYEPASS:

Short code: BP

Product name: ByePass

Product ID (GUID): EED7C0B1-1E12-4709-AB58-2551B1243F42

Sticky ID: 282

Static ock (cart-links.ts): bp-1y-v2024

Fallback prices: $19.95 regular / $19.95 sale

Price: $19.95

SaveAmt:

SavePct:

SavePrice: $19.95

Buy: https://secure1.iolo.com/sm/carts/?view=1.10.13&ock=bp-1y-v2024&coupon=iolo20

API return data:

waiting for API response…

SYSTEM MECHANIC BUSINESS:

Short code: SMB

Product name: System Mechanic Business

Product ID (GUID): 34727AC2-C35B-4F3D-8942-A23A4FFC80DF

Sticky ID: –

Static ock (cart-links.ts): smb3-1y

Fallback prices: – regular / – sale

Price:

SaveAmt:

SavePct:

SavePrice:

Buy: https://secure1.iolo.com/sm/carts/?view=1.10.13&ock=smb3-1y&coupon=iolo20

API return data:

waiting for API response…

SYSTEM SHIELD:

Short code: SS

Product name: System Shield

Product ID (GUID): 882362E0-C71A-411B-B16F-46D1B66E1890

Sticky ID: 287

Static ock (cart-links.ts): ss-1y-v2024

Fallback prices: $39.95 regular / $31.95 sale

Price: $39.95

SaveAmt:

SavePct:

SavePrice: $31.95

Buy: https://secure1.iolo.com/sm/carts/?view=1.10.13&ock=ss-1y-v2024&coupon=iolo20

API return data:

waiting for API response…

SEARCH & RECOVER:

Short code: SR

Product name: Search & Recover

Product ID (GUID): 882362E0-C71A-411B-B16F-46D1B66E1890

Sticky ID: 286

Static ock (cart-links.ts): sr-1y-v2024

Fallback prices: $39.95 regular / $31.95 sale

Price: $39.95

SaveAmt:

SavePct:

SavePrice: $31.95

Buy: https://secure1.iolo.com/sm/carts/?view=1.10.13&ock=sr-1y-v2024&coupon=iolo20

API return data:

waiting for API response…

DRIVESCRUBBER:

Short code: DS

Product name: DriveScrubber

Product ID (GUID): 36ED6646-A91F-4078-8781-9F2EB056D706

Sticky ID: 283

Static ock (cart-links.ts): ds-1y-v2024

Fallback prices: $29.95 regular / $23.95 sale

Price: $29.95

SaveAmt:

SavePct:

SavePrice: $23.95

Buy: https://secure1.iolo.com/sm/carts/?view=1.10.13&ock=ds-1y-v2024&coupon=iolo20

API return data:

waiting for API response…