Dutch Water Tech APIdutchwatertech.net ↗
Access the full Dutch Water Tech webshop catalogue and kenniscentrum knowledge base via 4 endpoints. Get prices, stock, categories, FAQs, and article content.
What is the Dutch Water Tech API?
The Dutch Water Tech API exposes 4 endpoints covering the complete dutchwatertech.net webshop catalogue and knowledge base. Use list_products to retrieve all ~200 published products with EUR prices, stock status, categories, and localized names in a single round trip, or fetch a single product's full description HTML, FAQ, technical manual, and all image URLs via get_product. Two parallel endpoints cover the kenniscentrum article collection with the same paged-locally design.
curl -X GET 'https://api.parse.bot/scraper/33ef807b-a377-450d-be56-eed118943825/list_products?language=nl' \ -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 dutchwatertech-net-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: Dutch Water Tech SDK — browse products and knowledge-base articles."""
from parse_apis.dutchwatertech_net_api import DutchWaterTech, Language, InputNotFound
client = DutchWaterTech()
# Browse the product catalogue in English, capped at 5 items.
for product_summary in client.product_summaries.list(language=Language.EN, limit=5):
print(product_summary.name, product_summary.price, product_summary.currency)
# Drill into the first product for the full description and FAQ.
summary = client.product_summaries.list(language=Language.NL, limit=1).first()
if summary is not None:
detail = summary.details()
print(detail.name, detail.description_html[:120])
print("Available in:", ", ".join(detail.urls.keys()))
# List knowledge-base articles and fetch the full text of the first one.
article_summary = client.article_summaries.list(language=Language.NL, limit=1).first()
if article_summary is not None:
article = article_summary.details()
print(article.title, article.content_text[:200])
# If the article promotes a product, fetch that product.
if article.connected_product_id is not None:
try:
linked_product = client.products.get(product_id=article.connected_product_id)
print("Linked product:", linked_product.name, linked_product.price)
except InputNotFound:
print("Linked product no longer available")
print("exercised: product_summaries.list / details / article_summaries.list / details / products.get")
Lists every published product in the webshop, one row per product, sorted alphabetically by the localized name. The whole catalogue (about 200 products) is read in one round trip and then paged locally, so any page costs the same. Names, URLs, categories and descriptions are returned in the requested language; where a translation is missing the Dutch value is used. `price` is the price shown on the site (EUR, incl. 21% VAT); `price_excl_vat` is derived from it. `category` filters locally on the product's category slug (from `categories[*].slug` or `sub_category`/`main_category`); an unknown slug yields an empty page. Pagination: `page` (1-based, default 1) and `per_page` (default 50, max 100); `total` is the number of matching products and `has_more` tells whether a next page exists.
| Param | Type | Description |
|---|---|---|
| page | integer | 1-based page number. |
| category | string | Category slug to filter on, matched case-insensitively against each product's categories[*].slug, sub_category and main_category (e.g. sita-uv-systemen). Omit for all products. |
| language | string | Content language for names, URLs and descriptions. |
| per_page | integer | Products per page; values above 100 are clamped to 100. |
{
"type": "object",
"fields": {
"page": "current page number",
"total": "number of published products matching the filter",
"category": "category filter applied, or null",
"has_more": "true when a next page exists",
"language": "language code the localized fields were resolved in",
"per_page": "effective page size",
"products": "array of product summaries; product_id is the key for get_product, price/price_excl_vat/sale_price are EUR numbers (sale_price and on_sale are null when the shop stores no value), stock_status is instock or outofstock, weight is in kg, categories is an array of {id, name, slug}, short_description_html is HTML"
},
"sample": {
"data": {
"page": 1,
"total": 10,
"category": "sita-uv-systemen",
"has_more": true,
"language": "en",
"per_page": 2,
"products": [
{
"sku": "UV550-system",
"url": "https://dutchwatertech.net/en/sita-uv/sita-uv-systems/sita-uv-550-system",
"name": "Sita UV 550 System",
"image": "https://beheer.dutchwatertech.net/wp-content/uploads/2023/05/Sita-UV-550-system.png",
"price": 2111,
"images": [
"https://beheer.dutchwatertech.net/wp-content/uploads/2023/05/Sita-UV-550-system.png"
],
"status": "publish",
"weight": 15,
"on_sale": null,
"currency": "EUR",
"language": "en",
"categories": [
{
"id": 46,
"name": "Sita UV Systemen",
"slug": "sita-uv-systemen"
}
],
"meta_title": "Sita UV 550 System | UV Water Treatment | Dutch Water Tech",
"product_id": "81",
"sale_price": null,
"stock_status": "instock",
"sub_category": "sita-uv-systems",
"main_category": "sita-uv",
"price_excl_vat": 1744.63,
"stock_quantity": 1000,
"meta_description": "Sita UV 550 system. Kills bacteria, fungi and viruses in the water. Also for legionella prevention. Original Sita Systems. Visit the webshop!",
"short_description_html": "SITA UV 550 uv disinfection system.300 J/m2 at 100 liters per minute.For disinfection and legionella prevention.This is the LCD version."
}
]
},
"status": "success"
}
}About the Dutch Water Tech API
Product Catalogue Endpoints
list_products returns the full published catalogue in one request, paged locally, so every page costs the same regardless of offset. Each product summary includes product_id, localized name, price and price_excl_vat in EUR, sale_price when active, stock status, and an array of categories objects with id, name, and slug. Filter by category using the category parameter (matched case-insensitively against categories[*].slug) and select content language with the language parameter. per_page accepts values up to 100.
get_product takes the product_id key from list_products and returns everything the product page shows: description_html, faq_html, and manual_html (all localized HTML, with Dutch as fallback), a urls map of language-code-to-URL, a names map, and an images array. This is the endpoint for rendering a full product detail view or extracting structured specification text.
Knowledge Base Endpoints
list_articles retrieves all published kenniscentrum articles for a given language (observed values: nl and es), sorted alphabetically by title. Each summary includes article_id, wp_post_id (null for Spanish articles), slug, title, and a 300-character plain-text excerpt. The connected_product_id field links an article to a specific product, making it straightforward to cross-reference with get_product.
get_article accepts a slug from list_articles and returns the full article body as both content_html and content_text, along with url, published_at (ISO timestamp or null), language, and connected_product_id. When the same slug exists in multiple languages, the language parameter selects which version is returned.
The Dutch Water Tech API is a managed, monitored endpoint for dutchwatertech.net — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when dutchwatertech.net 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 dutchwatertech.net 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 product comparison tool using
get_productto pulldescription_html,faq_html, and EUR pricing for water treatment equipment. - Sync a third-party inventory dashboard by polling
list_productsfor stock status andsale_pricechanges across the full ~200-product catalogue. - Generate a multilingual product feed by requesting
list_productswith differentlanguagevalues and collecting theurlsandnamesmaps fromget_product. - Cross-link knowledge base articles to product pages using
connected_product_idfromget_articleto fetch the matching product viaget_product. - Export the full kenniscentrum text corpus by iterating
list_articlesand fetching each article'scontent_textviaget_articlefor indexing or search. - Filter the catalogue by a specific product type using the
categoryslug parameter inlist_productsto narrow results to a single product line. - Populate a customer-facing FAQ section by extracting
faq_htmlandmanual_htmlfields fromget_productfor each item in a curated product list.
| 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 Dutch Water Tech provide an official developer API?+
How does category filtering work in list_products, and what categories are available?+
category parameter; it is matched case-insensitively against each product's categories[*].slug and sub_category fields. Available slugs are returned in the categories array on every product summary, so you can discover them by calling list_products without a filter first.Are product reviews or customer ratings available through this API?+
What languages are supported, and what happens when a translation is missing?+
language parameter is accepted by all four endpoints. Article content has been observed in nl (Dutch) and es (Spanish) only. For products, when a requested language translation is missing, get_product falls back to Dutch for description_html, faq_html, and manual_html. The names and urls maps on get_product show all available language variants for a given product.