Krasnoeibeloe APIkrasnoeibeloe.ru ↗
Access Krasnoe & Beloe store data: search products, get shop locations with coordinates and hours, check stock by city. 5 endpoints covering Russia-wide coverage.
What is the Krasnoeibeloe API?
The Krasnoe & Beloe API gives developers access to 5 endpoints covering the Russian alcohol retail chain's product catalog, shop network, and city coverage. The search_products endpoint returns product metadata including prices and XML IDs, while get_shops exposes store addresses, GPS coordinates, working hours, and alcohol sale hours for any city in the network. City and product lookups are structured so each response feeds cleanly into the next call.
No input parameters required.
curl -X GET 'https://api.parse.bot/scraper/84697562-2fbd-4625-a235-9d637cc0be38/get_cities' \ -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 krasnoeibeloe-ru-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: KrasnoeIBeloe SDK — cities, shops, product search, details."""
from parse_apis.krasnoe_beloe_api import KrasnoeIBeloe, City, Shop, Product, ProductDetail, NotFoundError
client = KrasnoeIBeloe()
# List cities that have stores — each carries region association
for city in client.cities.list(limit=5):
print(city.name, city.id, city.region_id)
# Drill into one city's shops via constructible City
chelyabinsk = client.city(id=1433)
for shop in chelyabinsk.shops.list(limit=3):
print(shop.num, shop.address, shop.time, shop.lat, shop.lng)
# Search products by keyword
product = client.products.search(query="виски", limit=1).first()
if product:
print(product.xml_id, product.product_id, product.price, product.amount, product.is_yellow)
# Get product details from a catalog URL slug
try:
details = client.productdetails.get(url="/catalog/vino/")
print(details.xml_id, details.city_id, details.total_amount, details.url)
except NotFoundError as exc:
print(f"Product not found: {exc}")
print("exercised: cities.list / city.shops.list / products.search / productdetails.get")
Returns all cities served by Krasnoe & Beloe stores, including their numeric IDs and region associations. City IDs are used as input to get_shops. The full list is returned in a single response with no pagination.
No input parameters required.
{
"type": "object",
"fields": {
"cities": "array of city objects with id, name, and regionId"
},
"sample": {
"data": {
"cities": [
{
"id": 778,
"name": "Белгород",
"regionId": 777
},
{
"id": 784,
"name": "Брянск",
"regionId": 783
},
{
"id": 1433,
"name": "Челябинск",
"regionId": 1430
}
]
},
"status": "success"
}
}About the Krasnoeibeloe API
Product Search and Details
The search_products endpoint accepts a keyword or product name (query) and returns a list of products with xml_id, product_id, price, amount, and is_yellow (indicating promotional pricing). The xml_id field is the key linking search results to get_product_details and get_product_stock. The get_product_details endpoint accepts a /catalog/-prefixed URL slug and resolves the full product page, returning the xml_id, detected city_id, and total_amount in stock.
Shop and City Lookup
get_cities returns the complete list of cities served by Krasnoe & Beloe stores, each with a numeric id, name, and regionId. No parameters are required and results are not paginated. Pass a city_id from that response into get_shops to retrieve every store in that city. Each shop object includes id, num, address, lat, lng, time, workTime, and alcTime — the last two fields distinguish general opening hours from alcohol-specific sale hours, which differ under Russian retail regulations.
Stock Availability
get_product_stock accepts an xml_id and an optional city_id and returns an availability array showing per-shop stock levels. Note that this endpoint is frequently blocked by Yandex SmartCaptcha, so responses may not always be available. For a guaranteed stock figure at the product level, get_product_details returns a total_amount field without the same restriction.
Default Behavior and Identifiers
When city_id is omitted from get_shops, the endpoint defaults to city 1433 (Челябинск). All city and shop references use numeric IDs consistently across endpoints. Product references use xml_id strings, which are distinct from the integer product_id also returned by search_products.
The Krasnoeibeloe API is a managed, monitored endpoint for krasnoeibeloe.ru — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when krasnoeibeloe.ru 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 krasnoeibeloe.ru 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?+
- Build a store locator map using
latandlngfields fromget_shopsfor any city in the network - Monitor price changes for specific products by polling
search_productsand tracking thepriceandis_yellowfields - Check which cities carry a specific product in stock using
get_product_stockwith differentcity_idvalues - Aggregate alcohol sale hours (
alcTime) across stores in a city for compliance-aware shopping apps - Resolve a Krasnoe & Beloe product URL slug to its
xml_idand currenttotal_amountviaget_product_details - Build a catalog index by iterating search keywords and collecting
xml_idandproduct_idpairs fromsearch_products - Cross-reference
regionIdfromget_citieswith shop data to group stores by Russian administrative region
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Krasnoe & Beloe have an official public developer API?+
What does get_shops return and how do working hours differ from alcohol sale hours?+
workTime for general store hours and alcTime for the hours during which alcohol may legally be sold, which can differ under Russian retail regulations. Both fields are returned alongside address, lat, lng, id, and num for every store in the requested city.Why does get_product_stock sometimes fail to return data?+
get_product_stock endpoint is frequently challenged by Yandex SmartCaptcha on the source site, which can prevent a valid response. When per-shop stock detail is not critical, get_product_details returns a total_amount field that is not subject to the same restriction.Does the API return product reviews or ratings?+
is_yellow) via search_products and get_product_details, but does not expose user reviews or ratings. You can fork this API on Parse and revise it to add an endpoint targeting product review data.Does search_products return more than one page of results?+
page or offset parameter. The API covers the first results page for the given query. You can fork this API on Parse and revise it to add pagination support for deeper catalog traversal.