NovelKeys APInovelkeys.xyz ↗
Access NovelKeys product data via API: switches, keycaps, keyboards, collections, availability status, preorders, and new arrivals across 9 endpoints.
What is the NovelKeys API?
The NovelKeys API provides 9 endpoints covering the full NovelKeys mechanical keyboard catalog, including switches, keycaps, and keyboards. Use get_switch_availability_status to retrieve per-variant stock status (IN STOCK, SOLD OUT, PREORDER, or CLEARANCE), list_all_collections to enumerate every product collection, and search_products to query the catalog by keyword. Responses include variant-level pricing, SKUs, images, tags, and vendor metadata.
No input parameters required.
curl -X GET 'https://api.parse.bot/scraper/a709cb82-30c6-4635-984d-fdd0f21e8def/get_all_switches' \ -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 novelkeys-xyz-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.
"""NovelKeys SDK — browse switches, check availability, explore collections."""
from parse_apis.novelkeys_api import NovelKeys, StockStatus, ProductNotFound
client = NovelKeys()
# Search for products by keyword — limit caps total items fetched.
for result in client.productsummaries.search(query="gateron", limit=3):
print(result.title, result.price, result.available)
# Drill into the first search result for full product details.
hit = client.productsummaries.search(query="cherry", limit=1).first()
if hit:
product = hit.details()
print(product.title, product.vendor, product.product_type)
# Check real-time variant availability using the StockStatus enum.
switches = client.products.list_switches(limit=1).first()
if switches:
for avail in switches.availability(limit=5):
print(avail.title, avail.price, avail.status)
# Browse a collection's products via constructible Collection.
keycaps = client.collection("keycaps")
for product in keycaps.products.list(limit=3):
print(product.title, product.handle)
# Typed error handling for a missing product.
try:
client.products.get(handle="nonexistent-product-xyz")
except ProductNotFound as exc:
print(f"Product not found: {exc.handle}")
print("exercised: search / details / list_switches / availability / collection.products.list / products.get")
Fetch all mechanical keyboard switch products from the switches collection. Returns the full list with pagination handled internally. Each product includes id, title, handle, variants, images, tags, vendor, and pricing.
No input parameters required.
{
"type": "object",
"fields": {
"products": "array of switch product objects with id, title, handle, variants, images, tags, vendor, and pricing",
"collection": "string, always 'switches'"
},
"sample": {
"data": {
"products": [
{
"id": 8717990035623,
"tags": [],
"title": "Typeplus Hi! Viz Switches",
"handle": "typeplus-hi-viz-switches",
"images": [
{
"id": 41378672607399,
"src": "https://cdn.shopify.com/s/files/1/3099/8088/files/NKxTypePlusxHiViz-TILE.jpg?v=1770338202",
"width": 3000,
"height": 1688,
"position": 1
}
],
"vendor": "NovelKeys Preorder",
"options": [
{
"name": "Title",
"values": [
"Default Title"
],
"position": 1
}
],
"variants": [
{
"id": 47845301780647,
"sku": "TYPEPLUS_HI_VIZ",
"price": "17.00",
"title": "Default Title",
"option1": "Default Title",
"available": false,
"compare_at_price": null
}
],
"body_html": "<p>Recolor of the lubricated NovelKeys Classic Blue switches.</p>",
"created_at": "2026-02-05T19:36:40-05:00",
"updated_at": "2026-06-10T23:20:11-04:00",
"product_type": "Switches",
"published_at": "2026-02-06T10:00:33-05:00"
}
],
"collection": "switches"
},
"status": "success"
}
}About the NovelKeys API
Switch and Product Data
The get_all_switches endpoint returns the complete switches collection as an array of product objects, each containing id, title, handle, variants, images, tags, vendor, and pricing fields. For deeper detail on a single switch, get_switch_details accepts a handle parameter (e.g. cherry-switches) and returns the full product record including body_html, options, and all associated images. get_switch_variants scopes down to just the variant layer for a given handle, returning id, title, price, sku, available, option1, and compare_at_price for each sub-type.
Collections and Search
list_all_collections returns every collection on the site with fields including id, title, handle, description, published_at, updated_at, image, and products_count. Once you have a collection handle, get_collection_products fetches every product in that collection, paginating internally so you receive the complete list in a single call. search_products accepts a query string and returns matching product summaries with price_min, price_max, available, vendor, type, and a direct url per result.
Availability, Preorders, and New Arrivals
get_switch_availability_status resolves each variant of a switch to one of four statuses: IN STOCK, SOLD OUT, PREORDER, or CLEARANCE, alongside the boolean available field, sku, and price. This makes it straightforward to filter for purchasable stock or flag items on clearance without parsing raw variant data yourself. get_preorder_products returns products currently available for preorder, and get_new_arrivals returns up to 50 of the most recently added or updated products sorted by recency, with created_at and published_at timestamps included.
The NovelKeys API is a managed, monitored endpoint for novelkeys.xyz — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when novelkeys.xyz 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 novelkeys.xyz 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?+
- Monitor switch restock events by polling
get_switch_availability_statusfor SOLD OUT variants flipping to IN STOCK. - Build a preorder tracker that surfaces new preorder listings via
get_preorder_productsas they appear. - Compare pricing across switch variants using
price,compare_at_price, andskufromget_switch_variants. - Index the full NovelKeys catalog for a custom search tool using
list_all_collectionsandget_collection_products. - Alert users to new product drops by watching
created_attimestamps fromget_new_arrivals. - Populate a switch comparison database with specs, tags, and vendor data from
get_switch_details. - Search across all product types by keyword using
search_productsand filter bytypeorvendor.
| 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 NovelKeys have an official developer API?+
What does `get_switch_availability_status` return beyond a simple in-stock boolean?+
status string that distinguishes four states: IN STOCK, SOLD OUT, PREORDER, and CLEARANCE. Each entry also includes variant_id, title, sku, price, and the raw boolean available field, so you can differentiate clearance items from regular stock without inspecting tags manually.Does the API cover non-switch product types like keyboards and keycaps?+
get_collection_products accepts any valid collection handle, including keycaps and keyboards, so non-switch products are accessible. search_products also covers all product types and returns a type field per result. Switch-specific endpoints like get_switch_variants and get_switch_availability_status are scoped to switch handles only. You can fork this API on Parse and add dedicated availability or variant endpoints for other product types.Are customer reviews or ratings included in the product responses?+
How is pagination handled across endpoints that return large lists?+
get_all_switches, list_all_collections, and get_collection_products all paginate internally, meaning a single API call returns the complete result set rather than a single page. The get_new_arrivals endpoint is an exception — it caps results at 50 products regardless of how many exist.