Sirthelabel APIsirthelabel.com ↗
Access SIR. The Label product catalog, variant pricing, loyalty tier rules, and policy pages via 4 structured API endpoints. Search, filter, and retrieve fashion data.
What is the Sirthelabel API?
The SIR. The Label API exposes 4 endpoints covering product search, full product detail, loyalty program configuration, and static help pages for the Australian fashion brand's US storefront. The search_products endpoint supports full-text queries with faceted filtering and pagination, returning per-product pricing, availability, and color variant data. get_product delivers complete variant-level inventory, option sets, and description HTML for any product handle.
curl -X GET 'https://api.parse.bot/scraper/6ee4f54b-8cbf-4955-8ea8-b775469a2ede/search_products' \ -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 sirthelabel-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.
"""
SIR. The Label API Client
Get your API key from: https://parse.bot/settings
"""
import os
import requests
from typing import Optional, Dict, Any, List
class ParseClient:
"""Client for SIR. The Label fashion brand API via Parse."""
def __init__(self, api_key: Optional[str] = None):
self.base_url = "https://api.parse.bot"
self.scraper_id = "6ee4f54b-8cbf-4955-8ea8-b775469a2ede"
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 API request to Parse endpoint."""
url = f"{self.base_url}/scraper/{self.scraper_id}/{endpoint}"
headers = {
"X-API-Key": self.api_key,
"Content-Type": "application/json"
}
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()
def search_products(
self,
query: str,
page: int = 1,
results_per_page: int = 24,
sort_field: str = "relevance",
sort_direction: str = "desc"
) -> Dict[str, Any]:
"""
Search products on SIR. The Label.
Args:
query: Search query text (e.g., 'dress', 'silk top')
page: Page number for pagination
results_per_page: Number of results per page
sort_field: Field to sort by (relevance, ss_days_since_published, ga_unique_purchases, ss_price)
sort_direction: Sort direction (asc, desc)
Returns:
Dict with query, pagination, results, and facets
"""
return self._call(
"search_products",
method="GET",
query=query,
page=page,
results_per_page=results_per_page,
sort_field=sort_field,
sort_direction=sort_direction
)
def get_product(self, handle: str) -> Dict[str, Any]:
"""
Get full product details by handle.
Args:
handle: Product URL handle/slug (e.g., 'phillipa-shirt-dress-eira-midnight')
Returns:
Dict with product details including images, variants, and pricing
"""
return self._call("get_product", method="GET", handle=handle)
def get_loyalty_program(self, country: str = "US") -> Dict[str, Any]:
"""
Get SIR. Loyalty program configuration.
Args:
country: Country code for localized loyalty info (e.g., 'US', 'AU')
Returns:
Dict with tiers, earning rules, and referral incentives
"""
return self._call("get_loyalty_program", method="GET", country=country)
def get_page(self, handle: str) -> Dict[str, Any]:
"""
Get help/policy page content by handle.
Args:
handle: Page URL handle (e.g., 'shipping-delivery', 'privacy-policy')
Returns:
Dict with page title, HTML body, and text summary
"""
return self._call("get_page", method="GET", handle=handle)
if __name__ == "__main__":
# Initialize client
client = ParseClient()
print("=" * 70)
print("SIR. THE LABEL - PRODUCT DISCOVERY & DETAILS WORKFLOW")
print("=" * 70)
# Step 1: Search for silk dresses
print("\n📍 Step 1: Searching for 'silk dress'...")
search_results = client.search_products(
query="silk dress",
results_per_page=5,
sort_field="ss_price",
sort_direction="asc"
)
print(f"Found {search_results['pagination']['total_results']} results")
print(f"Showing page {search_results['pagination']['current_page']} of {search_results['pagination']['total_pages']}")
# Step 2: Display search results summary
print("\n📋 Search Results Summary:")
for idx, product in enumerate(search_results["results"], 1):
print(f"\n {idx}. {product['name']}")
print(f" Price: ${product['price']}")
print(f" Color: {product['variant_color']}")
print(f" Available: {'✓' if product['available'] else '✗'}")
print(f" Collections: {', '.join(product['collection_handle'])}")
# Step 3: Display available facets for further filtering
print("\n🔍 Available Filters:")
for facet in search_results.get("facets", []):
print(f"\n {facet['label']}:")
for value in facet["values"][:3]: # Show top 3 values
print(f" - {value['value']} ({value['count']} products)")
# Step 4: Get detailed information for the first few products
print("\n" + "=" * 70)
print("📦 DETAILED PRODUCT INFORMATION")
print("=" * 70)
for idx, product in enumerate(search_results["results"][:3], 1):
product_handle = product["handle"]
print(f"\n--- Product {idx}: {product['name']} ---")
# Fetch full product details
product_details = client.get_product(product_handle)
print(f"Title: {product_details['title']}")
print(f"Available: {'Yes' if product_details['available_for_sale'] else 'No'}")
print(f"Price Range: ${product_details['price_range']['min']} - ${product_details['price_range']['max']} {product_details['price_range']['currency']}")
# Show available options (sizes, colors)
print("Available Options:")
for option in product_details["options"]:
print(f" {option['name']}: {', '.join(option['values'][:5])}")
if len(option["values"]) > 5:
print(f" ... and {len(option['values']) - 5} more")
# Show variant availability
print(f"Variants ({len(product_details['variants'])} total):")
for variant in product_details["variants"][:3]:
status = "In Stock" if variant["available_for_sale"] else "Out of Stock"
qty = variant.get("quantity_available", "N/A")
print(f" - {variant['title']}: {status} (Qty: {qty}) - ${variant['price']}")
if len(product_details["variants"]) > 3:
print(f" ... and {len(product_details['variants']) - 3} more variants")
# Step 5: Get loyalty program information
print("\n" + "=" * 70)
print("💎 LOYALTY PROGRAM DETAILS")
print("=" * 70)
loyalty = client.get_loyalty_program(country="US")
print(f"\nProgram: {loyalty['program_name']}")
print(f"Currency: {loyalty['currency']['symbol']}{loyalty['currency']['code'].upper()}")
print("\nProgram Tiers:")
for tier in loyalty["tiers"]:
lower = tier["bounds"]["lower"]
upper = tier["bounds"]["upper"]
print(f" {tier['name']}: {lower:,} - {upper:,} points")
print("\nEarning Rules:")
for rule in loyalty["earning_rules"]:
if rule["enabled"]:
print(f" - {rule['title']}: {rule['value']} point(s) per {rule['kind']}")
referral = loyalty["referral_incentive"]
print(f"\nReferral Incentive: {referral['discount_amount']}% off")
print(f" (Minimum spend: ${referral['minimum_spend']})")
# Step 6: Get shipping information
print("\n" + "=" * 70)
print("📬 SHIPPING & DELIVERY INFORMATION")
print("=" * 70)
shipping_page = client.get_page("shipping-delivery")
print(f"\nPage: {shipping_page['title']}")
print(f"\nSummary:\n{shipping_page['body_summary'][:300]}...")
print("\n" + "=" * 70)
print("✅ Workflow Complete!")
print("=" * 70)Search products on SIR. The Label using full-text search with faceted filtering and pagination. Returns matching products with pricing, availability, images, and facet breakdowns for further filtering.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number for pagination. |
| queryrequired | string | Search query text (e.g. 'dress', 'silk top', 'midi skirt'). |
| sort_field | string | Field to sort by. Accepts: relevance, ss_days_since_published, ga_unique_purchases, ss_price. |
| sort_direction | string | Sort direction. Accepts: asc, desc. |
| results_per_page | integer | Number of results per page. |
{
"type": "object",
"fields": {
"query": "string",
"facets": "array of facet objects with field, label, and values (each with value and count)",
"results": "array of product objects with id, handle, name, price, url, image_url, variant_color, available, tags, collection_handle",
"pagination": "object containing total_results, current_page, total_pages, per_page"
},
"sample": {
"query": "dress",
"facets": [
{
"field": "tags_colour",
"label": "Colour",
"values": [
{
"count": 36,
"value": "black"
}
]
}
],
"results": [
{
"id": "8222791204953",
"url": "/products/phillipa-shirt-dress-eira-midnight",
"msrp": "0",
"name": "Phillipa Shirt Dress",
"tags": "available, badge_New Arrivals, Dress, Silk",
"price": "490",
"handle": "phillipa-shirt-dress-eira-midnight",
"available": true,
"image_url": "https://cdn.shopify.com/s/files/1/0037/8925/8841/files/S96-SIR226-1037_PHILLIPA_SHIRT_DRESS_EIRA_MIDNIGHT-25905-Sir_The_Label-D2-0442_1080x.jpg?v=1779181927",
"variant_color": "Eira Midnight",
"collection_handle": [
"dresses",
"new-arrivals",
"silk-dresses"
]
}
],
"pagination": {
"per_page": 5,
"total_pages": 40,
"current_page": 1,
"total_results": 196
}
}
}About the Sirthelabel API
Product Search and Catalog
The search_products endpoint accepts a required query string (e.g. 'silk top', 'midi skirt') alongside optional parameters for sort_field (choose from relevance, ss_days_since_published, ga_unique_purchases, or ss_price), sort_direction, page, and results_per_page. Each result in the results array includes id, handle, name, price, url, image_url, variant_color, available, tags, and collection_handle. The facets array breaks down filterable dimensions with per-value counts, and the pagination object reports total_results, current_page, total_pages, and per_page.
Product Detail
get_product takes a handle string — the URL slug returned in search_products results — and returns the full product record. Response fields include title, description, images, options (name and values arrays), variants (each with id, sku, title, available_for_sale, quantity_available, price, currency, and compare_at_price), price_range (min/max with currency), and featured_image with src, width, height, and altText. This is sufficient to render a complete product page with size/color selectors and stock status.
Loyalty Program and Policy Pages
get_loyalty_program returns the public configuration of SIR.'s loyalty scheme: tiers (each with id, name, position, and point bounds), earning_rules (with kind, value, title, and enabled status), referral_incentive details, and settings covering point expiry behavior and birthday collection. An optional country parameter localizes the currency info. The get_page endpoint retrieves help and policy content by handle — known slugs include shipping-delivery, privacy-policy, terms-conditions, and contact-us — returning title, body_html, and a body_summary plain-text excerpt.
The Sirthelabel API is a managed, monitored endpoint for sirthelabel.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when sirthelabel.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 sirthelabel.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?+
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 feed for SIR. The Label items filtered by collection or color variant using
search_productsfacets. - Display real-time stock and size availability by fetching
quantity_availableper variant fromget_product. - Compare sale pricing by reading
compare_at_priceagainstpriceacross returned variants. - Render loyalty tier thresholds and point-earning rules in a customer-facing rewards explainer using
get_loyalty_program. - Pull structured shipping and returns policy text via
get_pagewith theshipping-deliveryorterms-conditionshandle. - Monitor new arrivals by sorting
search_productsresults byss_days_since_publisheddescending. - Build a referral program summary widget using the
referral_incentivefields fromget_loyalty_program.
| 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 SIR. The Label have an official public developer API?+
What does `search_products` return beyond basic product names and prices?+
variant_color, available status, tags, collection_handle, and an image_url, alongside the handle needed to fetch full details. The facets array provides field-level breakdowns with value counts you can use to build filter UIs without a separate facet query.Does `get_product` include sold-out variant information, or only available variants?+
variants array includes all variants regardless of availability. Each variant carries an available_for_sale boolean and a quantity_available integer, so sold-out sizes and colors are present in the response and can be identified programmatically.Are customer reviews or order history accessible through this API?+
Does the API cover the Australian storefront or only the US site?+
get_loyalty_program endpoint accepts a country parameter for currency localization, but product data and pagination reflect the US regional catalog. Coverage of the AU storefront is not currently included. You can fork the API on Parse and revise it to point at the AU domain.