Discover/caps API
live

caps APIcaps.nl ↗

Search the caps.nl computer hardware catalog and retrieve real-time prices, stock levels, EAN codes, and full specs for any product via 2 JSON endpoints.

Endpoint health
verified 3h ago
search_products
search_price
2/2 passing latest checkself-healing
Endpoints
2
Updated
3h ago

What is the caps API?

The caps.nl API exposes 2 endpoints for querying the caps.nl Dutch computer hardware catalog. Use search_products to run a free-text search and receive paginated product summaries including EUR prices (with and without Dutch VAT), brand, delivery time, and a brand facet. Use search_price to fetch a single product's current price, previous price when discounted, stock quantity, EAN barcode, SKU, and full specification table by product ID.

This call costs1 credit / call— charged only on success
Try it
1-based result page.
Result ordering.
Restrict results to one brand, using a name exactly as returned in brands[*].name of a previous search (e.g. MSI). Omitted = all brands.
Free-text search term, e.g. a product line or model name.
Results per page; the site accepts 12, 24, 36 or 48, other values are rejected.
→ api.parse.bot/scraper/1e25f3f5-58b4-4c8b-b72d-79f8cd2655d5/<endpoint>
Ready to send
Fill in the parameters and hit sign in to send to see live response data here.
Call it over HTTPgrab a free API key at signup
curl -X GET 'https://api.parse.bot/scraper/1e25f3f5-58b4-4c8b-b72d-79f8cd2655d5/search_products?sort=recommended&query=rtx+5070' \
  -H 'X-API-Key: $PARSE_API_KEY'
Python SDK · recommended

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 caps-nl-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: caps.nl hardware catalog — search, browse, and price check."""
from parse_apis.caps_nl_api import CapsNl, SortOrder, ProductNotFound

client = CapsNl()

# Search for graphics cards, cheapest first, capped at 5 results.
for item in client.product_summaries.search(
    query="rtx 5070", sort=SortOrder.PRICE_ASC, limit=5
):
    print(item.title, item.price_incl_vat, item.currency)

# Drill into the first result for full specs and stock info.
hit = client.product_summaries.search(query="rtx 5070 ti", limit=1).first()
if hit is not None:
    detail = hit.details()
    print(detail.title, detail.price_incl_vat, detail.availability)
    print("stock:", detail.stock_quantity)
    for label, value in list(detail.specifications.items())[:5]:
        print(f"  {label}: {value}")

# Point lookup by a product_id discovered above.
if hit is not None:
    try:
        product = client.products.get(product_id=hit.product_id)
        print(product.title, product.sku, product.ean)
    except ProductNotFound:
        print("product no longer listed")

print("exercised: product_summaries.search / details / products.get")
All endpoints · 2 totalmissing one? ·

Full-text product search across the whole caps.nl catalog. Returns one page of product summaries (one row per product) with prices in EUR including and excluding Dutch VAT, delivery time, brand, image and product URL, plus the total result count, page count and the brand facet (brand names with result counts) for narrowing. Paging is caller-controlled: page defaults to 1 and page_size to 12; has_more is true while further pages exist. One upstream request per call. A query with no matches returns total_results 0 and an empty items list.

Input
ParamTypeDescription
pageinteger1-based result page.
sortstringResult ordering.
brandstringRestrict results to one brand, using a name exactly as returned in brands[*].name of a previous search (e.g. MSI). Omitted = all brands.
queryrequiredstringFree-text search term, e.g. a product line or model name.
page_sizeintegerResults per page; the site accepts 12, 24, 36 or 48, other values are rejected.
Response
{
  "type": "object",
  "fields": {
    "page": "integer current page",
    "items": "array of product summaries: product_id (numeric string, input to search_price), title, brand, price_incl_vat and price_excl_vat (EUR numbers), old_price_incl_vat (number or null when not discounted), currency, delivery_time (Dutch text, e.g. '1-2 werkdagen'), free_shipping_nl (boolean), image, url",
    "query": "search term as interpreted by the site",
    "brands": "array of {name, count} brand facet values for the current result set",
    "has_more": "boolean, true when a next page exists",
    "page_size": "integer page size applied",
    "total_pages": "integer number of pages",
    "total_results": "integer total matching products across all pages",
    "suggested_query": "alternative spelling suggested by the site, or null"
  },
  "sample": {
    "data": {
      "page": 1,
      "items": [
        {
          "url": "https://caps.nl/msi-geforce-rtx-5070-ti-16g-ventus-3x-oc-id-998606.html",
          "brand": "MSI",
          "image": "https://cdn.caps.nl/media/catalog/product/9/9/9986064babd0a620a831a89441dc41dc73e5ce_1.jpg",
          "title": "MSI GeForce RTX 5070 Ti 16G VENTUS 3X OC",
          "currency": "EUR",
          "product_id": "998606",
          "delivery_time": "1-2 werkdagen",
          "price_excl_vat": 1098.35,
          "price_incl_vat": 1329,
          "free_shipping_nl": true,
          "old_price_incl_vat": null
        }
      ],
      "query": "rtx 5070",
      "brands": [
        {
          "name": "MSI",
          "count": 9
        },
        {
          "name": "GIGABYTE",
          "count": 16
        }
      ],
      "has_more": false,
      "page_size": 12,
      "total_pages": 1,
      "total_results": 9,
      "suggested_query": null
    },
    "status": "success"
  }
}

About the caps API

Searching the Catalog

The search_products endpoint accepts a free-text query and returns a paginated list of matching products from the caps.nl catalog. Each result row includes a numeric product_id (needed as input to search_price), title, brand, price_incl_vat, price_excl_vat in EUR, delivery_time, and the product page URL. The response also carries pagination metadata: total_results, total_pages, page, page_size, and has_more. A brands array gives the brand facet with name and hit count for the current result set, and suggested_query surfaces any alternative spelling the site proposes.

The page_size parameter only accepts the values 12, 24, 36, or 48 — any other value is rejected. Filtering by brand requires passing the brand parameter with a name exactly as it appears in brands[*].name from a previous search response. Results can be ordered via the sort parameter.

Product Detail and Pricing

The search_price endpoint takes a single product_id (the numeric string from search results) and returns the full detail for that product. Fields include price_incl_vat (current price), a previous price when the product is discounted, availability as a schema.org token (e.g. InStock), stock quantity, delivery_time in Dutch (e.g. 1-2 werkdagen), ean, sku, description, image, url, and a structured specification table as labeled key-value pairs. This makes it straightforward to compare hardware specs programmatically without parsing unstructured text.

Coverage and Language

All catalog data is sourced from caps.nl, a Dutch computer hardware retailer. Prices are in EUR. Delivery time strings are in Dutch. The EAN field returns null when the product page does not list one. The API does not cover user reviews, seller ratings, or historical price data.

Reliability & maintenanceVerified

The caps API is a managed, monitored endpoint for caps.nl — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when caps.nl 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 caps.nl 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.

Last verified
3h ago
Latest check
2/2 endpoints passing
Maintenance
Monitored & self-healing
Will this API break when the source site changes?+
It's built not to. Every endpoint is health-checked on a schedule with automated test probes. When the source site changes and a check fails, the API is automatically queued for repair and re-verified — that's the self-healing layer. Each API page shows when its endpoints were last verified. And because marketplace APIs are shared, any fix reaches everyone using it.
Is this an official API from the source site?+
No — Parse APIs are independent, managed REST wrappers over publicly available data. That is the point: where a site has no official API (or only a limited one), Parse gives you a maintained, monitored endpoint for that data and keeps it working as the site changes — so you get a stable contract over a source that never promised one.
Can I fix or extend this API myself if I need a new endpoint or field?+
Yes — and you don't have to wait on us. This API was generated by the Parse agent, which stays attached. Describe the change in plain English ("add an endpoint that returns reviews", "fix the price field") in the revise box on the API page or via the revise_api MCP tool, and the agent rebuilds it against the live site in minutes. Contributing the change back to the public API is free.
What happens if I call an endpoint that has an issue?+
Errors are machine-readable: a bad call returns a clean status with the list of available endpoints and a repair hint, so an agent (or you) can recover or trigger a fix instead of failing silently. Confirmed failures feed the automatic repair queue.
Common use cases
  • Track current EUR prices (incl. and excl. Dutch VAT) for specific CPU or GPU models across the caps.nl catalog.
  • Monitor stock availability and delivery time for hardware components before placing bulk orders.
  • Compare full specification tables for multiple products using the structured key-value spec fields from search_price.
  • Build a price-alert tool that checks price_incl_vat and the previous-price field to detect discounts.
  • Aggregate EAN and SKU codes from caps.nl to cross-reference products against other Dutch hardware retailers.
  • Filter search results by brand using the brands facet to narrow a product line to a single manufacturer.
  • Populate a product database with canonical URLs and images from the caps.nl catalog for a hardware comparison site.
Pricing & limitsSee full pricing →
TierPriceCredits/monthRate limit
Free$0/mo2005 req/min
Hobby$30/mo1,00020 req/min
Developer$100/mo5,000100 req/min
Team$300/mo20,000300 req/min
Company$1,000/mo100,000500 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.

Frequently asked questions
Does caps.nl provide an official developer API?+
caps.nl does not publish a documented public developer API. This Parse API provides structured access to catalog, pricing, and stock data from the caps.nl website.
What does `search_price` return beyond the current price?+
search_price returns the current price_incl_vat, a previous price when the product is on discount, availability as a schema.org token, stock quantity, delivery_time (Dutch text), ean, sku, description, image, url, and a full specification table as structured label-value pairs. The currency field is always an ISO code from the product page.
Can I retrieve customer reviews or seller ratings through this API?+
Not currently. The API covers product prices, stock, specs, EAN/SKU codes, and delivery time. Customer reviews and seller ratings are not included in the response fields. You can fork this API on Parse and revise it to add an endpoint that captures review data.
What happens if I pass a page_size value that isn't 12, 24, 36, or 48?+
The caps.nl site only accepts those four specific page sizes. Passing any other integer for page_size in search_products will result in a rejected request. Use one of the four supported values to avoid errors.
Does the API cover historical price data or price trends over time?+
Not currently. The API returns the current price and, when a discount is active, the previous (pre-discount) price. Historical price tracking over time is not included. You can fork this API on Parse and revise it to log price snapshots to build your own historical dataset.
Page content last updated . Spec covers 2 endpoints from caps.nl.
Related APIs in EcommerceSee all →