Discover/Smyths Toys API
live

Smyths Toys APIsmythstoys.com

Access the Smyths Toys product catalog via API. Search products by keyword and retrieve pricing, stock, and specs across UK, Ireland, Germany, and Netherlands.

Endpoints
2
Updated
2mo ago

What is the Smyths Toys API?

The Smyths Toys API provides 2 endpoints for querying the Smyths Toys product catalog across four regional locales: UK, Ireland, Germany, and the Netherlands. The search_products endpoint accepts a keyword query and returns a paginated array of matching products, while get_product_details returns structured data including name, price, and stock status for a specific product by its SKU code.

Try it
Current page number
Search keyword
Region/Locale (uk, ie, de, nl)
Number of results per page
api.parse.bot/scraper/14f94093-2f34-4248-a287-e5c61542fced/<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/14f94093-2f34-4248-a287-e5c61542fced/search_products' \
  -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 smythstoys-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.

"""
Smythstoys API Client

Get your API key from: https://parse.bot/settings
"""

import os
import requests
from typing import Optional, Any, Dict, List


class ParseClient:
    """Client for interacting with the Smythstoys API via Parse."""

    def __init__(self, api_key: Optional[str] = None):
        """
        Initialize the Parse API client.

        Args:
            api_key: API key for authentication. If not provided, uses PARSE_API_KEY env var.
        """
        self.base_url = "https://api.parse.bot"
        self.scraper_id = "053661b2-6234-4b41-97da-8dfcb7c7fb9c"
        self.api_key = api_key or os.getenv("PARSE_API_KEY")

        if not self.api_key:
            raise ValueError("API key must be provided or set in PARSE_API_KEY environment variable")

    def _call(self, endpoint: str, method: str = "POST", **params) -> Dict[str, Any]:
        """
        Make an API call to the Parse scraper.

        Args:
            endpoint: The endpoint name (e.g., 'search_products')
            method: HTTP method ('GET' or 'POST')
            **params: Query/body parameters for the endpoint

        Returns:
            Parsed JSON response from the API

        Raises:
            requests.RequestException: If the API request fails
        """
        url = f"{self.base_url}/scraper/{self.scraper_id}/{endpoint}"
        headers = {
            "X-API-Key": self.api_key,
            "Content-Type": "application/json"
        }

        try:
            if method.upper() == "GET":
                response = requests.get(url, headers=headers, params=params)
            elif method.upper() == "POST":
                response = requests.post(url, headers=headers, json=params)
            else:
                raise ValueError(f"Unsupported HTTP method: {method}")

            response.raise_for_status()
            return response.json()
        except requests.RequestException as e:
            raise Exception(f"API request failed: {str(e)}")

    def search_products(
        self,
        query: str,
        locale: str = "uk",
        page: int = 0,
        page_size: int = 48
    ) -> Dict[str, Any]:
        """
        Search for products by keyword query across different locales.

        Args:
            query: Search keyword (required)
            locale: Region/Locale - one of: uk, ie, de, nl (default: uk)
            page: Current page number (default: 0)
            page_size: Number of results per page (default: 48)

        Returns:
            Dictionary containing 'products' array with matching products
        """
        return self._call(
            "search_products",
            method="GET",
            query=query,
            locale=locale,
            page=page,
            page_size=page_size
        )

    def get_product_details(
        self,
        product_code: str,
        locale: str = "uk"
    ) -> Dict[str, Any]:
        """
        Get detailed information for a specific product by its code.

        Args:
            product_code: Product SKU/Code (e.g., '123456') (required)
            locale: Region/Locale - one of: uk, ie, de, nl (default: uk)

        Returns:
            Dictionary containing product details including name, price, and stock info
        """
        return self._call(
            "get_product_details",
            method="GET",
            product_code=product_code,
            locale=locale
        )


def main():
    """Practical usage example: Search for products and fetch details for each result."""
    
    # Initialize the client
    client = ParseClient()

    # Search for LEGO products in the UK
    print("🔍 Searching for LEGO products in UK...\n")
    search_results = client.search_products(
        query="LEGO",
        locale="uk",
        page=0,
        page_size=5  # Limit to 5 results for this example
    )

    products = search_results.get("products", [])
    
    if not products:
        print("❌ No products found")
        return

    print(f"✅ Found {len(products)} products\n")

    # Fetch detailed information for each product
    print("=" * 70)
    print(f"{'Product Name':<40} {'Price':>12} {'Stock Status':>15}")
    print("=" * 70)

    for product in products:
        product_code = product.get("code")
        product_name = product.get("name", "Unknown")

        if not product_code:
            continue

        try:
            # Get detailed information
            details = client.get_product_details(
                product_code=product_code,
                locale="uk"
            )

            name = details.get("name", "Unknown")
            price_data = details.get("price", {})
            price_value = price_data.get("value", "N/A") if isinstance(price_data, dict) else "N/A"
            
            stock_data = details.get("stock", {})
            stock_status = stock_data.get("stockLevelStatus", "Unknown") if isinstance(stock_data, dict) else "Unknown"

            # Format price
            if isinstance(price_value, (int, float)):
                price_str = f"£{price_value:.2f}"
            else:
                price_str = str(price_value)

            # Print formatted row
            print(f"{name:<40} {price_str:>12} {stock_status:>15}")

        except Exception as e:
            print(f"{product_name:<40} {'Error':>12} {str(e)[:15]:>15}")

    print("=" * 70)
    print("\n✨ Product details fetched successfully!")


if __name__ == "__main__":
    main()
All endpoints · 2 totalmissing one? ·

Search for products by keyword query across different locales.

Input
ParamTypeDescription
pageintegerCurrent page number
queryrequiredstringSearch keyword
localestringRegion/Locale (uk, ie, de, nl)
page_sizeintegerNumber of results per page
Response
{
  "type": "object",
  "fields": {
    "products": "array"
  },
  "sample": {
    "products": [
      {
        "code": "123456",
        "name": "LEGO Star Wars Millennium Falcon",
        "price": {
          "value": 149.99
        }
      }
    ]
  }
}

About the Smyths Toys API

Search Products

The search_products endpoint accepts a required query string and optional parameters for locale (uk, ie, de, nl), page, and page_size. This lets you paginate through result sets and scope searches to a specific regional market. The response is an array of products, making it suitable for building catalog browsers, comparison tools, or monitoring keyword-based product availability across regions.

Product Details

The get_product_details endpoint takes a required product_code (the Smyths SKU, e.g. 123456) and an optional locale parameter. The response includes a name string, a price object reflecting the regional pricing, and a stock object indicating availability. Running the same product_code against different locales lets you compare pricing and stock status across the UK, Irish, German, and Dutch storefronts for the same item.

Regional Coverage

Both endpoints support the same four locales: uk, ie, de, and nl. Locale selection affects both the currency and stock data returned — the UK and Ireland return GBP and EUR pricing respectively, while Germany and the Netherlands return Euro-denominated results. If no locale is specified, the endpoint falls back to a default region.

Reliability & maintenance

The Smyths Toys API is a managed, monitored endpoint for smythstoys.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when smythstoys.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 smythstoys.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?+
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 price differences for the same toy SKU across UK, Irish, German, and Dutch storefronts using get_product_details with different locale values.
  • Monitor stock availability for specific product codes ahead of peak shopping seasons like Christmas.
  • Build a toy search interface that surfaces Smyths Toys results by keyword and locale for a regional audience.
  • Alert users when a previously out-of-stock product (from the stock object) becomes available in their preferred locale.
  • Aggregate and compare product names and prices across European markets for competitive pricing analysis.
  • Feed a product catalog database by paginating through search_products results using the page and page_size parameters.
  • Validate that a list of product codes from internal systems returns valid entries on Smyths Toys across all supported regions.
Pricing & limitsSee full pricing →
TierPriceCredits/monthRate limit
Free$0/mo1005 req/min
Hobby$30/mo1,00020 req/min
Developer$100/mo5,000100 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.

Frequently asked questions
Does Smyths Toys have an official developer API?+
Smyths Toys does not publish a public developer API or API documentation for third-party access to their product catalog.
What does the `get_product_details` endpoint return beyond price?+
In addition to the price object (regional pricing), the response includes a name string and a stock object indicating availability for the given locale. The level of detail in the price and stock objects — such as sale prices, click-and-collect availability, or store-level stock — depends on what the product record exposes.
Does the API cover customer reviews or product ratings for Smyths Toys items?+
Not currently. The API covers product name, price, and stock data via get_product_details, and keyword-based product search via search_products. Reviews and ratings are not part of the current response shape. You can fork this API on Parse and revise it to add an endpoint targeting review data for a specific product.
Are there any limitations on which locales are supported?+
The API covers four locales: uk (United Kingdom), ie (Ireland), de (Germany), and nl (Netherlands). Other countries where Smyths Toys operates — such as Austria or Switzerland — are not currently included. You can fork this API on Parse and revise it to add support for additional locale values if Smyths Toys expands their storefront coverage.
How does pagination work in `search_products`?+
The search_products endpoint accepts integer page and page_size parameters. Increment page while keeping page_size consistent to walk through result sets. If neither parameter is supplied, the endpoint returns a default page of results.
Page content last updated . Spec covers 2 endpoints from smythstoys.com.
Related APIs in EcommerceSee all →
thomann.de API
Search and browse Thomann's music store catalog to find products by category, view detailed specifications and pricing, read customer reviews, and filter results to discover the instruments and gear you're looking for. Access comprehensive product information including descriptions, availability, and ratings all in one place.
amazon.co.uk API
Access data from amazon.co.uk.
hm.com API
Search H&M's US product catalog by keyword and instantly retrieve detailed information like prices, product images, available sizes, and real-time stock availability. Perfect for comparing items, tracking product details, or building shopping applications powered by H&M's current inventory data.
argos.co.uk API
argos.co.uk API
folksy.com API
Search and browse handmade products on Folksy by category, subcategory, or shop, and access detailed product information including pricing and availability. Discover sales and special offers while exploring artisan shops and their complete listings.
euronics.it API
Browse and search the complete Euronics Italy product catalog with real-time pricing information across all categories. Find exactly what you're looking for with powerful keyword search or explore products by category with full pagination support.
screwfix.com API
Access Screwfix's full product catalog — browse category hierarchies, retrieve paginated product listings with pricing and ratings, fetch detailed product specifications, and search by keyword. Ideal for price monitoring, product research, and catalog analysis.
tesco.com API
Search and browse Tesco's complete grocery catalog to find products with detailed nutritional information, ingredient lists, and customer reviews. Explore product suggestions via autocomplete and browse items organized by category to make informed shopping decisions.