Loft APIloft.co.jp ↗
Access Loft Japan's product catalog, category tree, sales rankings, and store locations via 6 structured API endpoints. Search, browse, and retrieve full product details.
What is the Loft API?
The Loft Japan API provides access to loft.co.jp's product catalog across 6 endpoints, covering product search, detailed product records, category browsing, popularity rankings, and physical store locations. The get_product_details endpoint returns over 10 fields per product including specs, stock status, multiple images, and a purchasability flag. Whether you are building a price tracker or a product discovery tool, the API exposes the structured data you need from one of Japan's major lifestyle retailers.
curl -X GET 'https://api.parse.bot/scraper/c7227b77-076c-4a6d-93cc-d6553f268707/search_products?page=1&sort=5&limit=40&query=%E3%83%9A%E3%83%B3' \ -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 loft-co-jp-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: Loft Online Store SDK — search, browse categories, rankings, drill into details."""
from parse_apis.Loft_Online_Store_API import Loft, Sort, ResourceNotFound
loft = Loft()
# Search for skincare products sorted by best sellers
for product in loft.product_summaries.search(query="化粧水", sort=Sort.BEST_SELLERS, limit=3):
print(product.name, product.brand, product.price_tax_included)
# Drill into full details for the first search result
item = loft.product_summaries.search(query="ペン", limit=1).first()
if item:
detail = item.details()
print(detail.name, detail.stock_status, detail.is_purchasable)
print(detail.description[:80])
# Browse categories and their subcategories
for cat in loft.categories.list(limit=3):
print(cat.name, cat.code)
for sub in cat.sub_categories:
print(f" {sub.name} ({sub.code})")
# Use constructible Category to list products in a known category
cosmetics = loft.category(code="ccb100001")
for p in cosmetics.products(limit=3):
print(p.name, p.brand, p.url)
# Get ranked products (overall ranking)
for ranked in loft.ranked_products.list(ranking_code="rr00", limit=3):
print(ranked.rank, ranked.name, ranked.price_tax_included)
# List store locations
for shop in loft.shops.list(limit=3):
print(shop.shop_id, shop.name)
# Typed error handling
try:
bad = loft.productsummary(product_code="0000000000000").details()
except ResourceNotFound as exc:
print(f"Not found: {exc}")
print("exercised: search / details / categories.list / category.products / ranked_products.list / shops.list")
Full-text search over the Loft product catalog. query matches product names and descriptions. Results are paginated and sortable. Each page returns up to limit products with total_count for the full result set.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number to retrieve. |
| sort | integer | Sort order. |
| limit | integer | Number of results per page. Accepted values: 20, 40, 80. |
| queryrequired | string | Search keyword. |
{
"type": "object",
"fields": {
"page": "integer current page",
"limit": "integer results per page",
"products": "array of product summary objects with product_code, name, brand, price_tax_included, url, image_url, labels",
"total_count": "integer total matching products"
},
"sample": {
"data": {
"page": 1,
"limit": 40,
"products": [
{
"url": "https://www.loft.co.jp/store/g/g4550376124245/",
"name": "モコモコソックス 3Pセット ねこぺん日和 パジャマ",
"brand": "ねこぺん日和",
"labels": [
"セール",
"ロフト限定"
],
"image_url": "https://www.loft.co.jp/shop_assets/img/goods/S/4550376124245-S.jpg",
"product_code": "4550376124245",
"price_tax_included": "770"
}
],
"total_count": 4693
},
"status": "success"
}
}About the Loft API
Product Search and Detail
The search_products endpoint accepts a required query string and optional page, limit (up to 80), and sort parameters. Sort values map to specific orderings: 1 for new arrivals, 2 for price high-to-low, 3 for price low-to-high, 4 for best sellers, 5 for recommended, and 6 for reviews. Each result in the products array includes product_code, name, brand, price_tax_included, url, image_url, and labels. The total_count field tells you how many records match your query across all pages.
For a single product, get_product_details takes a JAN/barcode product_id (e.g. 4902505670015) and returns the full record: description, specs as key-value pairs, an images array, a categories breadcrumb array, stock_status, and an is_purchasable boolean indicating whether the item can currently be added to a cart.
Categories, Rankings, and Stores
get_categories returns the full category tree with no required inputs — each entry includes a name, code, and a sub_categories array with child name, code, and url fields. Pass any category_code (e.g. ccb100001 for Cosmetics) to get_category_products to retrieve paginated product listings for that node. Rankings are available through get_ranking, which accepts an optional ranking_code (e.g. rr00 for the overall chart) and returns products with an explicit rank field alongside the standard product fields.
get_store_locations operates in two modes: called without a shop_id it returns a flat list of all shops with shop_id and name; called with a shop_id it returns that store's name, shop_id, and a details object of store-specific key-value pairs such as address and hours.
The Loft API is a managed, monitored endpoint for loft.co.jp — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when loft.co.jp 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 loft.co.jp 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 tax-included prices across search results and detect price changes over time using
price_tax_included. - Build a product discovery app filtered by category using
get_categoriescodes fed intoget_category_products. - Monitor stock availability for specific JAN barcodes via the
stock_statusandis_purchasablefields inget_product_details. - Aggregate bestseller and trending product data using
get_rankingwith therankfield for ordered popularity lists. - Index Loft's product catalog with brand attribution using the
brandfield returned across search and category endpoints. - Locate physical Loft stores by fetching all shop IDs via
get_store_locationsand then pulling address details per store. - Populate a comparison tool with full product specs using the
specsobject andimagesarray fromget_product_details.
| 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 Loft Japan (loft.co.jp) offer an official developer API?+
How does the `get_product_details` endpoint identify products, and what does it return?+
product_id parameter (e.g. 4902505670015). The response includes name, brand, description, a specs key-value object, an images array, a categories breadcrumb array, stock_status, is_purchasable, url, and product_code.Does the API return customer reviews or ratings for products?+
search_products orders results by reviews, but review content itself is not exposed in the response fields. You can fork this API on Parse and revise it to add a review-detail endpoint.What is the maximum number of search results per page, and can I paginate?+
limit parameter in search_products accepts a maximum of 80 results per page. Pagination is controlled by the page parameter. The total_count field in the response tells you the full result count so you can calculate how many pages are available.