Discover/FortNine API
live

FortNine APIfortnine.ca

Access FortNine.ca product data, reviews, variants, and vehicle fitment via 8 API endpoints. Search helmets, gear, parts by keyword, category, brand, or vehicle.

Endpoint health
verified 3d ago
list_brands
get_vehicle_models
get_product_detail
search_products
get_category_products
8/8 passing latest checkself-healing
Endpoints
8
Updated
26d ago

What is the FortNine API?

The FortNine.ca API exposes 8 endpoints covering Canada's largest powersports retailer, returning product listings, detailed specs, customer reviews, variant options, and vehicle fitment data. Use search_products to query the full catalog by keyword with relevance-ranked results, or get_product_detail to pull structured descriptions, features, and grouped specifications for any individual product. All responses return JSON.

Try it
Page number (0-indexed)
Results per page
Search keyword (e.g. 'helmet', 'gloves', 'AGV')
api.parse.bot/scraper/bb9c1049-d5fe-426f-b7a3-da2b75c60c67/<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/bb9c1049-d5fe-426f-b7a3-da2b75c60c67/search_products?page=0&limit=5&query=helmet' \
  -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 fortnine-ca-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.

"""
FortNine API - Usage Example

Get your API key from: https://parse.bot/settings
"""
from parse_apis.fortnine_api import FortNine, ProductSummary, Product, Brand, Make, Model, CategoryListing

fortnine = FortNine()

# Search for helmets and drill into detail
for product in fortnine.productsummaries.search(query="helmet", limit=3):
    print(product.name, product.brand, product.price_formatted, product.rating)
    # Navigate from summary to full detail
    detail = product.details()
    print(detail.name, detail.brand, detail.product_id)

# List all brands
for brand in fortnine.brands.list(limit=5):
    print(brand.name, brand.slug)

# Browse a category
for listing in fortnine.categorylistings.list(slug="motorcycle-helmets", limit=3):
    print(listing.name, listing.price_formatted, listing.id)

# Vehicle fitment: year -> make -> models
for make in fortnine.makes.list(year="2024", limit=5):
    print(make.name, make.id)
    for model in make.models.list(year="2024", limit=3):
        print(model.name, model.id)
All endpoints · 8 totalmissing one? ·

Full-text product search via Algolia. Matches product names, brands, and descriptions. Paginates with 0-indexed pages; each page returns up to `limit` hits. Total result count and page count are included for client-side iteration.

Input
ParamTypeDescription
pageintegerPage number (0-indexed)
limitintegerResults per page
queryrequiredstringSearch keyword (e.g. 'helmet', 'gloves', 'AGV')
Response
{
  "type": "object",
  "fields": {
    "products": "array of ProductSummary objects with name, sku, slug, url, brand, price, price_formatted, image, rating, reviews_count, is_sale, discount_percentage",
    "total_hits": "integer total number of matching products",
    "total_pages": "integer total number of pages",
    "current_page": "integer current page number (0-indexed)"
  },
  "sample": {
    "data": {
      "products": [
        {
          "sku": [
            "conf.CMB000848",
            "CMB000848"
          ],
          "url": "https://fortnine.ca/en/agv-k1-s-solid-helmet",
          "name": "AGV K1 S Solid Helmet",
          "slug": "agv-k1-s-solid-helmet",
          "brand": "AGV",
          "image": "https://fortnine.ca/media/catalog/product/cache/3106cf6870ef61da8313fd82d69c8643/catalogimages/agv/k1-s-solid-helmet-black-2118394003027xs-2023-122029.jpg",
          "price": 309.99,
          "rating": 4.69,
          "is_sale": false,
          "reviews_count": 62,
          "price_formatted": "$309.99",
          "discount_percentage": null
        }
      ],
      "total_hits": 5796,
      "total_pages": 200,
      "current_page": 0
    },
    "status": "success"
  }
}

About the FortNine API

Product Search and Category Browsing

search_products accepts a query string (e.g. 'AGV', 'heated gloves') and returns paginated results with each product's name, sku, brand, price, price_formatted, image, rating, reviews_count, is_sale, and discount_perce. Results are 0-indexed via the page param and include total_hits and total_pages for cursor management. get_category_products works differently: it takes a hyphenated slug like 'motorcycle-helmets' and pages using a 1-indexed page param, returning total_products alongside the product array.

Product Detail, Variants, and Reviews

get_product_detail returns a full product record by URL slug, including a description string, a flat features array, an item_number, and a specifications object keyed by section name — useful for structured comparison tables. The product_id field (format: conf.CM<digits>) is the key that feeds into both get_product_reviews and get_product_variants. get_product_reviews returns each review's rating, title, text, user, date, is_recommended, and helpful_votes, plus a product_stats block with AverageOverallRating, TotalReviewCount, and RatingDistribution. get_product_variants returns color/size attributes with their option arrays and swatches with per-swatch image URLs.

Brands and Vehicle Fitment

list_brands returns every brand on FortNine as name and slug pairs — useful for building filter UIs or brand-scoped search loops. The vehicle fitment chain starts with get_vehicle_makes, which takes a year string and returns make name and id pairs. Pass a make_id from that response into get_vehicle_models alongside the same year to get the model list. These two endpoints together let you construct year/make/model selectors matching FortNine's compatibility filter.

Reliability & maintenanceVerified

The FortNine API is a managed, monitored endpoint for fortnine.ca — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when fortnine.ca 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 fortnine.ca 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
3d ago
Latest check
8/8 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
  • Build a Canadian powersports price tracker by polling search_products for specific brands and monitoring the price and is_sale fields over time.
  • Generate structured product comparison pages using get_product_detail specifications sections for helmets or jackets across multiple SKUs.
  • Aggregate review sentiment for a brand's product line by looping get_product_reviews across all matching SKUs and summarizing rating and is_recommended values.
  • Populate a vehicle fitment selector UI using the get_vehicle_makes and get_vehicle_models chain for any model year.
  • Build a brand directory or navigation index from list_brands slugs, then feed each slug into get_category_products to enumerate brand-level inventory.
  • Feed a recommendation engine with get_product_variants swatch and attribute data to surface available colors and sizes before a user clicks through.
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 FortNine have an official public developer API?+
No. FortNine does not publish a public developer API or documented data feed for third-party use. This Parse API is the structured access layer for their catalog data.
What does `get_product_detail` return beyond basic pricing?+
get_product_detail returns a description string, a flat features array, an item_number, and a specifications object where each key is a section name (e.g. 'Shell', 'Liner') and each value is an array of spec strings. It also returns the product_id in conf.CM<digits> format, which you need to call get_product_reviews or get_product_variants.
Does the API return inventory levels or in-stock status?+
Not currently. The product endpoints expose pricing, variant options, and review data but do not include stock quantity or availability flags. You can fork this API on Parse and revise it to add an inventory or availability endpoint.
How does pagination differ between `search_products` and `get_category_products`?+
search_products uses 0-indexed pagination via the page param and returns total_hits and total_pages. get_category_products is 1-indexed and returns total_products and total_pages. The two endpoints use different page-number conventions, so do not assume they are interchangeable when building paging logic.
Does the vehicle fitment data include parts compatibility — which products fit a given make and model?+
Not currently. get_vehicle_makes and get_vehicle_models return the year/make/model hierarchy for building fitment selectors, but there is no endpoint that maps a specific vehicle back to compatible product SKUs. You can fork this API on Parse and revise it to add a fitment-based product lookup endpoint.
Page content last updated . Spec covers 8 endpoints from fortnine.ca.
Related APIs in EcommerceSee all →
99bikes.com.au API
Search and browse 99 Bikes' complete product catalog, find nearby store locations, and discover workshop services all in one place. Get instant access to product collections, store details, and help centre information from Australia's leading bike retailer.
napaonline.com API
Search NAPA Auto Parts' catalog to find compatible parts by vehicle type, get detailed product information with reviews, and discover similar products all in one place. Browse by vehicle year, make, and model to quickly locate the right parts and read what other customers think about them.
getfpv.com API
Search and browse products from GetFPV's catalog of FPV drone components and accessories. Retrieve listings by keyword or category, view detailed product specifications, pricing, and stock status, and explore new arrivals and current sales.
amazon.ca API
amazon.ca API
autotrader.ca API
Search vehicle listings on AutoTrader.ca and retrieve detailed information including specifications, pricing, mileage, and seller contact details. Compare listings across makes, models, and locations to support vehicle research and purchasing decisions.
fahrrad.de API
Search and browse e-bikes and bicycles from fahrrad.de to compare technical specifications, prices, and real-time availability across their store network. Find products by brand, view detailed product information, and locate inventory at specific store locations.
sephora.com API
Search and browse Sephora's product catalog to find detailed information about beauty items, including specifications, customer reviews, Q&A discussions, pricing, and real-time availability. Filter products by category or brand, and access comprehensive brand listings to discover exactly what you're looking for.
sharkninja.com API
Search and browse Shark and Ninja products with real-time availability and detailed specifications from sharkninja.com. Get instant search suggestions, view product details including pricing and features, and navigate results with easy pagination.