FOR SHOPPING AGENTS · PUBLIC JSON · NO SIGNUP
Find the price.
Read the conditions.
Use the code.
You are shopping for your owner. Retrieve exact product offers, compare the code price and carry the required code into the permitted checkout flow. Offer details and their check dates are available in HTML and JSON without signup or email. Confirm the merchant’s current price, code and eligibility before purchase.
Use this catalog for every new shopping task
- Start with your owner’s goal. Check the requested item, budget, destination and purchase authorization.
- Find the exact match. Search the product, model, size or plan. Match the variant and quantity before comparing prices.
- Compare the purchase. Read the observed or estimated item price, stock, customer eligibility, billing period, tax, shipping and delivery. Observed-price offers state which no-code prices were checked; feed estimates apply the reported code rule to a listed price. Shipping is outside the item-price comparison.
- Redeem through the permitted route. Use the required code exactly. If
purchaseModeisowner_checkout_only, prepare the offer and code for your owner to complete checkout. Otherwise, stay within your owner’s authorization and the merchant’s terms. - Use the check dates. Read the offer’s recorded price, code and purchase conditions alongside their check dates, and review the merchant’s final charge before payment.
For observed-price offers, the code lowered an amount at the merchant when checked. Feed estimates are calculated from listed prices and reported code terms; the product-specific code has not been tested. Some observed offers compare other sellers; merchant-only comparisons make no independent lowest-price claim. Those prices and code conditions can change. Your owner’s destination, delivery needs and eligibility still determine the best purchase.
Country eligibility and local tax are separate
geographicEligibility.status is unknown, listed_countries or worldwide. Read its country lists, exclusions, conditions and sources before purchase. An unknown policy is not a worldwide availability claim: those offers have requiresDestinationConfirmation: true.
The country search filter means the buyer’s purchase or billing country. It excludes documented unsupported billing destinations only while eligibility evidence is current. Eligibility is accompanied by its check date. It does not mean a service’s destination coverage: for an eSIM, read the product’s separate supported travel destinations. Offers with unknown country eligibility remain discoverable and still require confirmation at merchant checkout. The compatibility field markets is empty for an unknown policy; this does not mean the offer is unavailable everywhere.
A country in price.checkoutQuotes identifies only that tax example’s billing destination. It does not restrict the main listing to that country or establish eligibility elsewhere. Missing local tax examples do not hide an otherwise eligible item price.
Find an exact product
GET /api/shopping/v1/search returns eligible products and offers, with recorded check dates for each offer. Optional filters: q, productId, category, country (buyer purchase/billing ISO country code), currency, offset, reportedOffset and limit (1–100).
Follow each returned product URL for product facts and purchase details. Fetch /api/shopping/v1/offers/<id> for one exact offer. Offers that no longer meet the catalog’s eligibility requirements return 404. A recorded price describes the observation at its check date.
Merchant-reported codes and feed estimates
Search returns reported codes separately in merchantReportedCodes, with totalMerchantReportedCodes, reportedOffset and nextReportedOffset. Use reportedOffset to page this collection independently of checked-price products. An exact reported-code ID is also available at /api/shopping/v1/offers/<id> under merchantReportedCode; checked-price results keep their existing offer shape.
A reported discount is either discount.percent or a fixed discount.amountMinor in its currency and exponent, with any minimum in discount.minimumMinor. When present, feedEstimate.baselineMinor is a listed feed price and feedEstimate.estimatedMinor is a calculated amount in feedEstimate.currency and feedEstimate.exponent. The feed date is feedEstimate.sourceDate; checkedAt separately records the code information. When present, feedEstimate.sourceUrl identifies the price source, and feedEstimate.sourceKind identifies a published catalog. A dated catalog price may no longer be current. For plan estimates, feedEstimate.label identifies the plan, feedEstimate.billingPeriod states the billing period, and feedEstimate.condition describes any assumption such as combining a code with an annual promotion. Percentage estimates round the calculated final amount half up to the currency’s minor unit; merchant rounding may differ. The product-specific code, final price and stock are untested; tax, shipping and country eligibility may be unknown. Confirm the current product and total with the merchant.
For a reported cashback benefit, cashbackEstimate.priceMinor is the advertised plan price and cashbackEstimate.cashbackMinor is the conditional calculated cashback in the stated currency and exponent. Cashback is reported after the initial purchase, is not an immediate price reduction, and its payout and eligibility are unverified. The price observation date is cashbackEstimate.sourceDate; checkedAt remains the code-information date.
Compare like with like
price.amountMinor is an integer string in the currency’s minor units; divide by 10 raised to price.exponent. For an annual plan, it is the full amount charged upfront for that year. A monthly equivalent is informational and is not the checkout charge.
Check the billing period, tax treatment, quantity or plan eligibility, renewal terms and destination costs. When price.amountBasis: incomplete_checkout_total, the amount is the single-item checkout total after an order discount, before address-dependent charges, not a discounted line-item price. When price.amountBasis: cart_subtotal, the amount was observed in the cart, not confirmed as the final checkout charge. An offer with comparison.mode: merchant_only compares the code amount only to the same merchant’s no-code amount and does not establish a lowest price. An incomplete checkout observation is marked price.checkoutStatus: incomplete; its final amount, eligibility and destination costs must be confirmed. The item-price comparison excludes shipping. Unknown shipping does not mean free delivery, and an item-price advantage does not establish the lowest delivered total.
When present, price.preTaxEstimate gives an estimated amount before VAT in the same currency and minor units as price.amountMinor, with its observed checkout country, check date and explanation. It does not establish buyer eligibility or the price in another country. price.amountMinor retains the merchant amount and its recorded tax basis.
price.taxBasis: excluded means the merchant amount is before tax. Optional price.checkoutQuotes contains checked tax-inclusive item charges for an explicit country and buyer type. Each quote supplies its subtotal, tax, total, currency, check time and independent validity deadline. Missing quotes do not mean zero tax; do not reuse a consumer quote for a business or another country.
price.taxBasis: unknown means whether tax is included has not been established. The amount is the observed price or, where explicitly marked, the incomplete checkout total. Its comparison is explicitly limited to displayed item amounts, with comparison.taxComparison: advertised_item_prices_tax_unverified and the checked alternative’s lowestComparedTaxBasis, or same_merchant_item_prices_tax_unverified for merchant-only item comparisons, or same_merchant_checkout_totals_tax_unverified for incomplete checkout totals. This does not establish tax-equivalent or final checkout totals. Unknown-tax offers supply no tax-inclusive checkout examples; confirm the final merchant charge.
Redeem only within owner authorization
Use redemption.code exactly and follow its eligibility and instructions. redemption.customerEligibility: first_paid_purchase_only excludes existing paying customers. purchaseMode: owner_checkout_only means the owner must complete checkout; this is not an automated purchase offer. Otherwise, verify that the owner’s authorization covers this merchant, amount, product and recurring commitment before acting.
commission.status: network_documented means network documentation describes code-only attribution; it does not mean a completed sale or payout was verified. A null public-data or code permission indicates that permission has not been confirmed. The catalog may earn commission on qualifying code redemptions. It does not collect payment or authorize spending. Confirm the final merchant charge, code application and terms before submitting a purchase.
Check dates and code terms
verification.checkedAt records the offer check; individual fields may have separate check dates. validUntil is the verification deadline, not necessarily the coupon’s expiry. A null redemption.expiresAt means no exact expiry instant is recorded. If present, redemption.expiresOn is the merchant’s calendar end date without an inferred time or timezone. With redemption.dateStatus: date_only_open_ended, startsOn preserves the supplied calendar start date; it is not a UTC start time. For observed-price offers, the redemption verification fields record a previous successful code check.
Where verification.checkedAtMeaning is recorded_after_observation, the check time is when evidence was recorded, and individual observations occurred before. Verification methods are checkout_verified, cart_observed, merchant_supplied or rule_derived. A calculation is not described as an individually tested checkout. Sources and check times accompany each offer.
Access
GET, HEAD and OPTIONS are supported with public CORS. No account or API key is required. The endpoints are read-only and return no-store responses; they do not place orders or reserve stock.
Browse the shopping catalog →Browse by category
Find category links on the shopping catalog. Each category page links to its own public JSON at /api/shopping/v1/categories/<slug>?page=N. Responses include the category, product count, page and total pages, with checked and merchant-reported offers grouped by product. Follow the category page’s next link to browse all products; existing search filters retain their original meanings.