AdScaled Shop API

Read-only public API of the AdScaled Shop marketplace: search products, read product and shop details.

AdScaled Shop (https://e-shop.adscaled.media) is a Czech online marketplace where independent shops and makers sell electronics, fashion, home goods, sport equipment, beauty products, books, toys and garden supplies. This API is the same one the website uses. The operations documented here are public, read-only and need no authentication.

Money is always an integer number of hellers (1/100 of a Czech koruna, CZK): price: 19900 means 199 Kč. Image paths such as /api/images/<file>.webp are relative to the server URL. inStock tells whether a listing is shown as in stock; whether an item can really be ordered is confirmed only in the checkout of the website.

Buying, reservations, reviews and questions need a personal account with a verified e-mail and are done by the person in a browser on the website (cross-site requests and requests without a browser Origin are refused for every write). Send people to the product URL on the website instead of trying to order for them.

Rate limits: all /api paths share 300 requests per 60 seconds per client IP (policy flood). Responses carry the IETF RateLimit-Policy and RateLimit headers (draft-ietf-httpapi-ratelimit-headers); a 429 response also carries Retry-After in seconds. Every error response (4xx and 5xx) has the same JSON shape, the Error schema: { "error": { "code", "message" } }, where code is a stable machine-readable string.

Versioning: the path carries the major version (/api/v1/). Backwards-compatible additions (new fields, operations or optional parameters) keep v1; a breaking change gets a new path (/api/v2/). A deprecated operation is marked deprecated: true, answers with Deprecation (RFC 9745) and Sunset (RFC 8594) headers and stays available for at least 90 days after the deprecation is announced. The same operations without the version segment (/api/catalog and so on) are what the website itself calls; they behave identically and stay available, but integrations should use /api/v1/.

Endpoints

GET /api/v1/health (getHealth)

Check API availability. Returns ok: true when the server is running, whether e-mail delivery works and whether card payments are enabled.

Example:

curl 'https://e-shop.adscaled.media/api/v1/health'

Responses:

GET /api/v1/checkout-options (getCheckoutOptions)

List shipping and payment options. Shipping methods with prices, payment methods with fees (card only when enabled) and the per-shop free shipping threshold, all in hellers.

Example:

curl 'https://e-shop.adscaled.media/api/v1/checkout-options'

Responses:

GET /api/v1/catalog (searchCatalog)

Search and filter products. Full-text search (every word must match the product name, category, shop or description) with filters, sorting and pagination. When nothing matches, didYouMean may suggest a corrected query.

ParameterInRequiredType and constraintsDescription
qquerynostring, max length 80Search words, e.g. ceramic mug. Czech product names match best.
categoryquerynostring, one of elektronika, moda, domacnost, sport, krasa, knihy, hracky, zahradaCategory id.
shopquerynostring, max length 80Shop slug, e.g. adscaled-merch.
sortquerynostring, one of recommended, newest, price_asc, price_desc, rating, discount, default recommendedSort order.
pagequerynointeger, min 1, max 1000, default 1Page number.
sizequerynointeger, min 1, max 48, default 24Products per page.
minquerynonumber, min 0Minimum price in CZK (whole koruna, not hellers).
maxquerynonumber, min 0Maximum price in CZK (whole koruna, not hellers).
salequerynostring, one of 11 = only discounted products.
ratingquerynointeger, min 1, max 5Minimum average rating.
stockquerynostring, one of 11 = only products shown as in stock.

Example:

curl 'https://e-shop.adscaled.media/api/v1/catalog?q=hrnek&sort=price_asc'

Responses:

GET /api/v1/search/suggest (suggestSearch)

Autocomplete a search query. Up to 6 products, 3 shops and the matching category ids for a query of at least 2 characters, plus didYouMean for typos.

ParameterInRequiredType and constraintsDescription
qqueryyesstring, max length 80Partial search text.

Example:

curl 'https://e-shop.adscaled.media/api/v1/search/suggest?q=konev'

Responses:

GET /api/v1/products (getProductsByIds)

Get product cards by id. Product cards for a comma-separated list of ids, in the given order; unknown or hidden ids are skipped.

ParameterInRequiredType and constraintsDescription
idsqueryyesstringUp to 60 product ids, e.g. 12,7,31.

Example:

curl 'https://e-shop.adscaled.media/api/v1/products?ids=1,2'

Responses:

GET /api/v1/products/{id} (getProduct)

Get product details. Full product with description, specifications and photos, reviews with a rating summary, answered questions, price history (lowest price in the last 30 days), related products and more products of the same shop. The website URL of a product is /en/product/{id}/{slug} (other languages: see llms.txt).

ParameterInRequiredType and constraintsDescription
idpathyesinteger, min 1Product id.

Example:

curl 'https://e-shop.adscaled.media/api/v1/products/1'

Responses:

GET /api/v1/compare (compareProducts)

Compare products. Product details including specifications for up to 4 products, for a side-by-side comparison.

ParameterInRequiredType and constraintsDescription
idsqueryyesstringUp to 4 product ids.

Example:

curl 'https://e-shop.adscaled.media/api/v1/compare?ids=1,2'

Responses:

GET /api/v1/shops (listShops)

List shops. All public shops with city, number of products and average rating.

Example:

curl 'https://e-shop.adscaled.media/api/v1/shops'

Responses:

GET /api/v1/shops/{slug} (getShop)

Get shop details. Shop profile with description and contact e-mail, plus reviews of its products. Its products: searchCatalog with shop={slug}.

ParameterInRequiredType and constraintsDescription
slugpathyesstring, max length 80Shop slug.

Example:

curl 'https://e-shop.adscaled.media/api/v1/shops/adscaled-merch'

Responses:

Rate limits

Every /api response carries RateLimit-Policy and RateLimit headers (draft-ietf-httpapi-ratelimit-headers). All documented endpoints share the flood policy: 300 requests per 60 seconds per client IP (sliding window). Write endpoints used by the website add their own policies to the same headers.

Example: RateLimit-Policy: "flood";q=300;w=60 and RateLimit: "flood";r=297;t=58 (q quota, w window in seconds, r remaining, t seconds until a slot frees up). A 429 response adds Retry-After in seconds; wait at least that long.

Errors

Every non-2xx response uses one JSON shape (Error in the OpenAPI components): { "error": { "code": "not_found", "message": "not_found" } }. Branch on code, not on message. Codes of the documented operations: not_found (404), forbidden_origin (403, browser request from another website), rate_limited (429), server_error (500).

Versioning and deprecation

Authentication

None for the documented endpoints. Requests from browsers are accepted only from the shop's own origin (CORS); server-side clients without an Origin header can read. Accounts, orders, reservations, reviews and seller tools are not part of the public API.