Fantastic Furniture APIfantasticfurniture.com.au ↗
Search the Fantastic Furniture AU catalogue and fetch product details including AUD price, stock status, images, and features via 2 REST endpoints.
What is the Fantastic Furniture API?
The Fantastic Furniture API gives developers structured access to the Australian furniture retailer's online catalogue through 2 endpoints. The search_products endpoint returns up to 24 products per page with prices, variant codes, and pagination metadata, while get_product_details returns a single product's full detail record including AUD price, stock status, images, weight, and a feature list.
curl -X GET 'https://api.parse.bot/scraper/c79c8bd0-c1b4-4e9a-b470-0098218a5b91/search_products?query=charcoal+sofa' \ -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 fantasticfurniture-com-au-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: Fantastic Furniture SDK — search, browse variants, fetch full details."""
from parse_apis.fantasticfurniture_com_au_api import FantasticFurniture, ProductNotFound
client = FantasticFurniture()
# Search for sofas and print summary info for the first few hits.
for summary in client.product_summaries.search(query="charcoal sofa", limit=5):
print(summary.name, summary.price, summary.currency)
for variant in summary.variants:
print(f" variant: {variant.name} — {variant.colour} — ${variant.price}")
# Drill into the first result's full detail via the summary→detail navigation.
hit = client.product_summaries.search(query="dining table", limit=1).first()
if hit is not None:
detail = hit.details()
print(detail.name, detail.price, detail.stock_status, detail.in_stock)
print("dimensions:", detail.assembled_dimensions)
print("rating:", detail.average_rating, "reviews:", detail.number_of_reviews)
for feat in detail.features:
print(f" {feat.label}: {feat.value}")
for cat in detail.categories:
print(f" category: {cat.name} ({cat.code})")
# Point lookup by product_code discovered from the search result.
try:
product = client.products.get(product_code=hit.product_code)
print(product.name, product.formatted_price)
for opt in product.colour_options:
print(f" colour: {opt.name} ({opt.hex})")
for sz in product.size_options:
print(f" size: {sz.name}")
except ProductNotFound:
print("product no longer available")
print("exercised: product_summaries.search / details / products.get")
Keyword search of the store catalogue. Returns one page of up to 24 products (the store's fixed page size) with name, price in AUD, product page URL and colour/size variants, plus total_results and total_pages. Pagination is controlled by page (1-based, defaults to 1); has_more is true while further pages exist. When the store treats a keyword as a category name (for example 'sofa'), it redirects the search to that category listing; the endpoint follows that redirect and reports the category in redirected_to_category (null for a plain keyword search). A keyword with no matches returns an empty products array with total_results 0. product_code of each product is the code accepted by get_product_details.
| Param | Type | Description |
|---|---|---|
| page | integer | 1-based results page number. Each page holds up to 24 products. |
| queryrequired | string | Search keyword(s), e.g. 'charcoal sofa'. |
{
"type": "object",
"fields": {
"page": "1-based page returned",
"query": "the keyword searched",
"has_more": "true when a later page exists",
"products": "array of products: product_code (variant code accepted by get_product_details), base_code, name, price/original_price/savings (AUD numbers), currency, url (product page), is_new, is_australian_made, is_online_only, has_limited_stock, sellable_online, promotion_sticker, categories (slash-separated category names), variants (array of colour/size variants with product_code, name, price, original_price, savings, colour, size, url)",
"page_size": "store page size (24)",
"total_pages": "total pages available for this query",
"total_results": "total matching products reported by the store",
"redirected_to_category": "category code the store redirected the keyword to, or null"
},
"sample": {
"data": {
"page": 1,
"query": "charcoal sofa",
"has_more": true,
"products": [
{
"url": "https://www.fantasticfurniture.com.au/tivoli-2-seater-charcoal-sofa/p/TIVSOF2STOOOFABCHA",
"name": "Tivoli 2 Seater Charcoal Sofa",
"price": 699,
"is_new": false,
"savings": 0,
"currency": "AUD",
"variants": [
{
"url": "https://www.fantasticfurniture.com.au/tivoli-2-seater-charcoal-sofa/p/TIVSOF2STOOOFABCHA",
"name": "Tivoli 2 Seater Charcoal Sofa",
"size": "2 Seater",
"price": 699,
"colour": "Charcoal",
"savings": 0,
"product_code": "TIVSOF2STOOOFABCHA",
"original_price": 699
}
],
"base_code": "BNC_TIVSOOOOPU2ST",
"categories": "2 Seater Sofas/Tivoli/Australian Made Sofas",
"product_code": "TIVSOF2STOOOFABCHA",
"is_online_only": false,
"original_price": 699,
"sellable_online": true,
"has_limited_stock": false,
"promotion_sticker": "WAS_NOW_AND_SAVE",
"is_australian_made": false
}
],
"page_size": 24,
"total_pages": 3,
"total_results": 67,
"redirected_to_category": null
},
"status": "success"
}
}About the Fantastic Furniture API
What the API Covers
The API exposes two endpoints against the Fantastic Furniture Australia catalogue. search_products accepts a query string (e.g. 'charcoal sofa') and an optional 1-based page parameter. Each response includes a products array where each entry carries a product_code, base_code, name, current price, original_price, savings in AUD, and any colour or size variants. The response also returns total_results, total_pages, has_more, and a redirected_to_category field indicating when the store resolved the keyword to a category rather than a free-text search.
Product Detail Fields
get_product_details takes a product_code — the code from a product page URL or from search_products.products[*].product_code — and returns the full product record. Fields include name, url, price, savings, currency (ISO code), in_stock (boolean derived from the store's stock_status string such as 'inStock'), an images array of primary image URLs, weight in kg or null, a features array of {label, value} pairs such as dimensions or material, and an overview object with a heading and HTML copy block when present.
Pagination and Search Behaviour
The store's fixed page size is 24 products per page. Iterate through results by incrementing page and checking has_more. When the store redirects a keyword search to a category, the redirected_to_category field in the search_products response reflects that category code, which can affect what products appear. Free-text and category-based searches may return different result sets even for the same keyword.
The Fantastic Furniture API is a managed, monitored endpoint for fantasticfurniture.com.au — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when fantasticfurniture.com.au 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 fantasticfurniture.com.au 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?+
- Track AUD price changes on specific sofas or beds by polling
get_product_detailson known product codes. - Build a stock availability monitor using the
in_stockfield returned byget_product_details. - Aggregate search results across multiple pages using
total_pagesandhas_moreto catalogue a full keyword segment. - Extract product dimensions and materials from the
featuresarray for comparison or specification sheets. - Identify discounted items by comparing
priceagainstoriginal_priceand filtering on non-zerosavings. - Enumerate colour and size variants from
search_productsresults to understand the full range for a product line. - Populate a price-comparison tool for Australian furniture buyers using real-time AUD pricing.
| 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 Fantastic Furniture have an official developer API?+
What does the `redirected_to_category` field in `search_products` mean?+
redirected_to_category contains the category code the store used. This affects which products appear in the products array. If the value is null, the response reflects a standard keyword search result.Does the API return customer reviews or ratings for products?+
get_product_details, but does not include customer reviews or star ratings. You can fork it on Parse and revise to add an endpoint targeting product review data.How does pagination work and what is the maximum number of results per page?+
search_products response returns at most 24 products, which is the store's fixed page size reflected in the page_size field. Use the page parameter (1-based) to step through results, and check has_more or compare page against total_pages to determine whether additional pages exist.