Sinsay APIsinsay.com ↗
Access Sinsay Poland's current promotional products via one API endpoint: prices, discounts, promo-code prices, 30-day lows, ratings, colours, and size availability.
What is the Sinsay API?
The Sinsay.com API exposes 1 endpoint — get_deals — that returns products from Sinsay Poland's active special-offer campaign, including up to 19 fields per product: regular price, final price, clearance discount percentage, advertised promo-code price, 30-day lowest price, ratings, available colours, and size availability. The campaign title and URL are resolved on every call, so the endpoint always reflects whichever promotion is currently live on the Sinsay homepage.
curl -X GET 'https://api.parse.bot/scraper/523c47b5-3cf6-4fd9-be1b-24da9a2d3f2a/get_deals?sort=recommended' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace sinsay-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: Sinsay Poland deals — browse the current promo, inspect prices and sizes."""
from parse_apis.sinsay_com_api import Sinsay, DealSort, InputFormatInvalid
client = Sinsay()
# See which promotion is currently running and how large it is.
try:
deal = client.deals.current()
except InputFormatInvalid as e:
print(f"Deal fetch failed: {e.message}")
raise
print(f"Promotion: {deal.promotion.name}")
print(f"Total products in campaign: {deal.total_products}")
# Browse the cheapest discounted items in the promotion.
for product in client.products.list(sort=DealSort.PRICE_ASC, only_discounted=True, limit=5):
coupon_note = ""
if product.coupon is not None:
coupon_note = f" | code {product.coupon.code} → {product.coupon.price_with_coupon}"
print(f"{product.name} {product.final_price} {product.currency} (-{product.discount_percent}%){coupon_note}")
# Drill into one top-rated product's sizes and colours.
top = client.products.list(sort=DealSort.TOP_RATED, limit=1).first()
if top is not None:
print(f"\nTop rated: {top.name} ({top.rating_avg}★ from {top.rating_count} reviews)")
for size in top.sizes:
status = "in stock" if size.in_stock else "out of stock"
print(f" {size.name}: {status}")
print(f" Colours: {', '.join(top.colors)}")
print("\nexercised: deals.current / products.list")
Returns one page of products from Sinsay Poland's current special-offer promotion (the campaign behind the homepage promo banner, e.g. '-20% Wrześniowe Oszczędzanie'). The campaign itself is resolved on every call from the special-offer page, so the endpoint follows whatever promotion the site currently runs; the response's `promotion` object names it. Each call costs two round trips (promotion page + product page). Result grain is one product (colour variant) per row, with prices in PLN as numbers: `regular_price`, `final_price`, `has_discount` / `discount_percent` (clearance markdowns), `lowest_price_30_days`, and `coupon` — the site's advertised promo code with the price it would give (informational only; nothing is redeemed). `labels` are the site's own badge texts (Polish). Pagination is offset-based via `page` (1-based, default 1) and `page_size` (default 50, clamped to 100); `total_products` and `has_more` come from the site's own count of the promotion. `sort` selects the site's ordering. `only_discounted=true` keeps only rows with a clearance markdown from the fetched page, so a filtered page can legitimately be empty while `has_more` is still true — keep paging; `products_fetched` vs `products_returned` shows how many were dropped. Product `id`/`sku` are Sinsay's own identifiers.
| Param | Type | Description |
|---|---|---|
| page | integer | 1-based page number over the promotion's product list. |
| sort | string | Site ordering of the promotion's products. |
| page_size | integer | Products fetched per page; values above 100 are clamped to 100. |
| only_discounted | boolean | When true, only products with a clearance markdown (has_discount=true) on the fetched page are returned. |
{
"type": "object",
"fields": {
"page": "integer, echoed page",
"sort": "string, effective sort key",
"has_more": "boolean, whether a further page exists in the promotion",
"products": "array of product rows: id, sku, name, url, image, currency, regular_price (number), final_price (number), has_discount, discount_percent (integer, 0 when no markdown), price_type (site's price type e.g. regular/clearance), lowest_price_30_days (number or null), coupon (object code/discount_percent/price_with_coupon, or null when no code is advertised), labels (array of badge texts), rating_avg (number or null), rating_count (integer or null), colors (array of colour names of available variants), sizes (array of {name, in_stock}), merchant (seller name)",
"page_size": "integer, effective page size after clamping",
"promotion": "object: name (site's campaign title) and url of the current special-offer listing",
"total_products": "integer, site-reported number of products in the promotion",
"products_fetched": "integer, rows fetched from the site for this page before the only_discounted filter",
"products_returned": "integer, rows in products after filtering"
},
"sample": {
"data": {
"page": 1,
"sort": "price_asc",
"has_more": true,
"products": [
{
"id": "6585005",
"sku": "961HM-GLD",
"url": "https://www.sinsay.com/pl/pl/kolczyki-z-blyszczacym-wykonczeniem-961hm-gld",
"name": "Kolczyki z błyszczącym wykończeniem",
"image": "https://static.sinsay.com/media/catalog/product/cache/850/a4e40ebdc3e371adff845072e1c73f37/9/6/961HM-GLD-051-1-1087019_1.jpg",
"sizes": [
{
"name": "Jeden rozmiar",
"in_stock": true
}
],
"colors": [
"złoty",
"srebrny"
],
"coupon": {
"code": "SAVE20",
"discount_percent": 20,
"price_with_coupon": 3.19
},
"labels": [
"-33%",
"taniej o;2.00 PLN"
],
"currency": "PLN",
"merchant": "Sinsay",
"price_type": "clearance",
"rating_avg": 4.53,
"final_price": 3.99,
"has_discount": true,
"rating_count": 15,
"regular_price": 5.99,
"discount_percent": 33,
"lowest_price_30_days": 5.99
}
],
"page_size": 3,
"promotion": {
"url": "https://www.sinsay.com/pl/pl/all/oferta-specjalna",
"name": "🟡 -20% Wrześniowe Oszczędzanie"
},
"total_products": 8968,
"products_fetched": 3,
"products_returned": 3
},
"status": "success"
}
}About the Sinsay API
What the API Returns
The single get_deals endpoint returns a paginated list of products from Sinsay Poland's current special-offer promotion (for example, a campaign such as '-20% Wrześniowe Oszczędzanie'). Each response includes a promotion object containing the campaign's name and url, so you always know which campaign the products belong to. Top-level response fields include page, sort, has_more, page_size, total_products, products_fetched, and products_returned — giving you full control over pagination and allowing you to detect filtering effects at a glance.
Product Fields
Each item in the products array carries id, sku, name, url, image, currency, regular_price, final_price, has_discount, and discount_p (the clearance markdown percentage), as well as the advertised promo-code price and the 30-day lowest price required under EU price-transparency rules. Ratings, available colour options, and size availability are also returned per product, making the endpoint useful for both price-tracking and inventory-awareness use cases.
Filtering and Pagination
The page parameter (1-based) and page_size parameter control pagination; page_size values above 100 are clamped to 100, and the has_more flag tells you whether additional pages exist. The sort parameter passes the site's native ordering options through to the response. Setting only_discounted to true filters the returned products array to rows where has_discount is true, while products_fetched still reflects the unfiltered page count so you can account for the filtering effect in your logic.
The Sinsay API is a managed, monitored endpoint for sinsay.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when sinsay.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official sinsay.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Track
regular_pricevsfinal_priceover time to chart markdown depth across Sinsay promotional campaigns. - Monitor
discount_pand promo-code prices to alert users when clearance reaches a target threshold. - Compare
final_priceagainst the 30-day lowest price to flag deals that are genuinely at their lowest. - Check size availability fields to filter out products that are already sold out before surfacing deals.
- Aggregate
total_productsand campaignnameacross calls to measure the scale of successive Sinsay promotions. - Use
only_discounted=trueto build a feed of only clearance-marked items from the active promotion. - Pull
ratingsdata alongside prices to prioritise well-rated products in a deal-curation tool.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Sinsay have an official developer API?+
What does `get_deals` return for each product, and how is the 30-day price different from `final_price`?+
final_price is the price after any active promotion or clearance markdown. The 30-day lowest price is the lowest price recorded for that product in the 30 days before the current discount was applied — a figure Sinsay displays in compliance with EU Omnibus Directive requirements. The two fields will differ whenever the current promotional price is lower than recent history, or match when the product has been at this price level for most of the prior month.Does the API cover Sinsay stores in other countries beyond Poland?+
Can I retrieve a specific product's full detail page — description, all images, or full size chart?+
get_deals endpoint returns the fields available in the promotion listing: name, URL, one image, prices, discount, ratings, colours, and size availability. Extended product descriptions, full image galleries, and complete size charts are not covered. You can fork this API on Parse and revise it to add a product-detail endpoint using the url field returned per product.How fresh is the promotion data, and what happens when a campaign ends?+
name, url, and product list. There is no historical campaign archive; only the current promotion is accessible.