coop APIcoop.it ↗
Access CoopShop.it product catalog via API: categories, search, product details, offers, and recommendations for Italy's Coop grocery store.
What is the coop API?
The coop.it API covers 7 endpoints that expose the full CoopShop.it Italian grocery catalog, from hierarchical category browsing to keyword search and detailed product pages. The get_product_details endpoint returns nutritional information, allergens, and ingredient lists by product slug, while get_offers surfaces active promotions or newly added items depending on current availability.
curl -X GET 'https://api.parse.bot/scraper/887773c5-cd58-4639-8d2e-34a6cb94ee41/get_categories?warehouse_id=0' \ -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 coop-it-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: CoopShop SDK — browse categories, search products, get details."""
from parse_apis.CoopShop_API import CoopShop, ProductSort, ProductNotFound
coop = CoopShop()
# Search for pasta products
for product in coop.product_summaries.search(query="pasta", limit=5):
print(product.name, product.vendor.name, product.media_url)
# Drill into the first search result for full details
item = coop.product_summaries.search(query="latte", limit=1).first()
if item:
detail = item.details()
print(detail.name, detail.slug, detail.vendor.name)
# List top-level categories
for cat in coop.categories.list(limit=3):
print(cat.name, cat.slug, cat.category_id)
# Fetch a specific category and browse products sorted by price
category = coop.categories.get(category_slug="condimenti-conserve-e-scatolame")
for p in category.products(sort=ProductSort.PRICE_ASC, limit=3):
print(p.name, p.description, p.vendor.name)
# Get suggestions for a product
detail = coop.products.get(product_slug="cavatelli-secchi-coop-ff500g")
for suggestion in detail.suggestions(limit=3):
print(suggestion.name, suggestion.slug)
# Typed error handling
try:
coop.products.get(product_slug="nonexistent-product-slug-xyz")
except ProductNotFound as exc:
print(f"Product not found: {exc.product_slug}")
print("exercised: search / details / categories.list / categories.get / products / suggestions / error handling")
Returns the full hierarchy of product categories from the CoopShop catalog, including up to 3 levels of nesting. Each category includes its ID, name, slug, URL, and nested subcategories.
| Param | Type | Description |
|---|---|---|
| warehouse_id | string | Warehouse ID to scope categories. |
{
"type": "object",
"fields": {
"categories": "array of category objects, each containing categoryId, name, slug, itemUrl, description, metaData, and nested categories array"
},
"sample": {
"data": {
"categories": [
{
"name": "Protezioni solari",
"slug": "protezioni-solari",
"itemUrl": "/protezioni-solari",
"categories": [
{
"name": "Viso",
"slug": "protezioni solari/viso",
"itemUrl": "/protezioni solari/viso",
"parentId": 42754,
"categoryId": 42755
}
],
"categoryId": 42754
}
]
},
"status": "success"
}
}About the coop API
Category and Product Browsing
get_categories returns the complete CoopShop catalog hierarchy with up to 3 levels of nesting. Each category object includes categoryId, name, slug, itemUrl, description, and metaData, plus a nested categories array for child nodes. Once you have a slug, get_subcategories resolves it to the full category object along with its direct children — useful for building navigation trees or scoping searches to a specific section of the store. Both endpoints accept an optional warehouse_id parameter to restrict results to a particular fulfillment location.
Search and Category-Level Product Listings
get_products_by_category and search_products return paginated product arrays. Category-level listings accept category_id, page, page_size, sort (values: price_asc, price_des, name_asc, name_des), and a boolean promo flag to filter promotional items. Search takes a query string and supports the same pagination controls. Both endpoints return a page object with selPage, totPages, totItems, and itemsPerPage, plus a facets array for available filter dimensions and a products array with fields including productId, name, slug, vendor, mediaURL.
Product Details, Offers, and Recommendations
get_product_details accepts a product_slug and returns the richest response in the API: metaData contains nested product_description (ingredients, allergens, nutritional info) and product_info, alongside vendor, mediaURL, description (weight/quantity), and productId. get_offers returns promotional or newly-added products depending on what is currently active, and exposes an offer_type field ('promo' or 'new_product') so callers can distinguish between the two cases. get_suggested_products accepts a product_id and an optional limit parameter, returning an array of related product objects with the same core fields as search results.
The coop API is a managed, monitored endpoint for coop.it — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when coop.it 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 coop.it 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 price-monitoring tool by polling
get_products_by_categorywithsort=price_ascacross category IDs. - Populate a dietary-filter app using allergen and ingredient data from
get_product_detailsmetaData. - Track active promotions at CoopShop.it by periodically calling
get_offersand checking theoffer_typefield. - Implement a product recommendation widget using
get_suggested_productswith a knownproduct_id. - Sync a local grocery database by paginating through
get_products_by_categorywithpage_sizeandpageparameters. - Index the full category tree for a store locator or navigation UI using
get_categoriesandget_subcategories. - Run keyword-based product discovery by passing search terms to
search_productsand filtering results byfacets.
| 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 CoopShop.it have an official developer API?+
What does get_offers return, and how does it decide between promos and new products?+
get_offers first checks whether promotional products are currently available. If promotions exist, it returns them and sets offer_type to 'promo'. If no active promotions are found, it falls back to newly added products and sets offer_type to 'new_product'. You can also pass a category_id to scope offers to a specific section of the catalog.Does the API return pricing information for products?+
productId, name, slug, vendor, and mediaURL. Structured price fields (unit price, discounted price) are not currently exposed as distinct top-level response fields in this version of the API. You can fork it on Parse and revise it to surface pricing data if it becomes available in the underlying catalog responses.How does the warehouse_id parameter affect results?+
warehouse_id is optional on every endpoint. It scopes the response to a specific CoopShop fulfillment warehouse, which can affect product availability and category listings. Omitting it returns catalog data without warehouse-level filtering.