Public catalogue API

Search and compare the products sold by PaperWelt. These endpoints require no API key and perform no checkout or payment actions. Use this domain for every request: the host selects the store catalogue. Send Accept: application/json for JSON endpoints and errors.

1. Search

GET https://paperwelt.com/api/search/products?q=bosch&language=en&limit=10&page=1
ParameterMeaning
qRequired, 2–100 characters. Matches product names across supported languages. Exact multi-word matching falls back to wildcard and, on MySQL, phonetic matching.
languageen, de, fr, it, es; default en. Missing translations fall back to English or German while retaining the requested language's canonical path.
limit / page1–50 results (default 3), page starts at 1. Follow next_page_url until null. total_count is the complete matching count.
brandExact brand name.
categoryCategory ID from the category list.
min_price_cents / max_price_centsInclusive bounds in EUR cents; 10000 means EUR 100.00. Filters use displayed customer prices, including rounding.
sortrelevance (default), price_asc, price_desc, name_asc, name_desc. Ties use product ID for stable pagination.
curl -H 'Accept: application/json' 'https://paperwelt.com/api/search/products?q=bosch&language=en&min_price_cents=1000&max_price_cents=20000&sort=price_asc&limit=10'

The response contains results, count, total_count, page, limit, has_more, next_page_url, previous_page_url and computed_at. Searches with no matches return an empty list, total_count: 0 and next_page_url: null. Page links preserve filters. The catalogue is live, so concurrent price or catalogue changes can change later pages.

2. Product details

GET https://paperwelt.com/api/catalogue/products/{sku}?language=en

Use the UUID sku returned by search. The response includes specifications with their original labels and units, validated GTIN/MPN when supplied in specifications, categories, canonical language URLs, variants and policy links. Missing identifiers are omitted. Inactive products and products belonging to another store return 404.

3. Prices and availability

price_cents is the authoritative numeric amount; currency is EUR and includes_vat is true. It is the current price for one storefront unit, before combined-cart fitting discounts or VAT exemption. Checkout confirms the final total. computed_at is the response time; product_updated_at records the product row update and is not a price guarantee. No price expiry is promised.

All active storefront items have unlimited inventory. stock: 999 is an unlimited-inventory sentinel, not a counted balance or purchase limit. availability: in_stock describes that policy. can_order separately states whether current pricing permits an order. The existing cart quantity and payment rules still apply.

4. Store policies

Store JSON includes seller contact details, supported shipping countries, the same localized shipping/return/terms copy as the website, and FAQ. Consult the applicable destination policy for delivery times and import charges.

5. Shopping feeds

Google Merchant Center XML and OpenAI JSONL are complete streamed snapshots for this store and language. Each eligible item or variant has a stable UUID. Records missing a title, description, brand, valid absolute image URL, or positive orderable price are excluded. Relative images must be made public and absolute before feed inclusion.

Feed diagnostics provides eligible/excluded counts and reasons. It can take longer on large catalogues. Configure your Merchant Center account's target market, shipping and return settings before submitting the Google feed. OpenAI feed onboarding requires approved-partner access; this export does not register the store or enable checkout in ChatGPT. Refresh snapshots at least daily and after material catalogue or pricing changes.

6. Limits and discovery

Search, product and store endpoints allow 120 requests per minute per IP and store, shared across those endpoints. Feeds share a separate limit of 10 and diagnostics allow 2. HTTP 422 reports invalid parameters; 404 means an unavailable resource; 429 means the rate limit was reached. Respect Retry-After when returned. Price sorting/filtering evaluates all matching prices before pagination, so use specific queries for faster responses.

The guide, OpenAPI and llms.txt help tools that discover or are directed to them. Publishing them does not guarantee automatic use, indexing or recommendations by AI services. Public pages remain readable without JavaScript, with canonical URLs and ordinary structured product data.