Developer API
A free, read-only JSON API of everything on this site β every AeroTech, Cesaroni & Loki motor we track, with per-vendor stock and pricing. It's plain static files on a CDN, so:
- No API key, no rate limits, no cost. Use it as much as you like.
- CORS-open (
Access-Control-Allow-Origin: *) β call it straight from a browser. - Refreshed about hourly. Check
meta.jsonfor the exactgenerated_at. - It's static JSON β no query parameters; fetch a file and filter client-side.
Endpoints
Base URL https://motor.fusionspace.co/api/v1/
- GET /api/v1/meta.json β schema version,
generated_at, counts, manufacturer list. Poll this to detect updates. - GET /api/v1/motors.json β every matched motor we have a listing for (D-class and up, matching the site).
- GET /api/v1/in-stock.json β same shape, only motors in stock at a vendor right now.
- GET /api/v1/vendors.json β the vendors we track, with per-vendor counts.
- GET /api/v1/motors/aerotech/H128W.json β a single motor β slugs mirror the site's
/motorURL. - GET /api/v1/openapi.json β OpenAPI 3.1 spec (drop into Swagger / Postman / codegen).
Motor shape
Every payload carries schema_version (currently 1) and generated_at. Prices are integer cents.
{
"id": 1234,
"path": "/api/v1/motors/aerotech/H128W.json", // this motor's own endpoint
"manufacturer": "AeroTech", // | "Cesaroni Technology" | "Loki Research"
"designation": "H128W",
"impulse_class": "H", // AβO
"diameter_mm": 29,
"total_impulse_ns": 176.2,
"avg_thrust_n": 128,
"burn_time_s": 1.4,
"propellant": "White Lightning",
"sparky": false,
"motor_type": "reload", // | "SU" | "hybrid"
"case_info": "RMS-29/180", // null for single-use
"hazmat": "required", // "required" | "varies" (F/G) | "none"
"in_stock": true,
"vendor_count": 5, // distinct vendors carrying it
"in_stock_vendor_count": 3,
"listing_count": 9, // total listings (a vendor may list variants)
"cheapest_in_stock": { // pack-aware per-unit; null if none in stock
"unit_price_cents": 3000, "currency": "USD",
"vendor": "Wildman", "url": "https://β¦", "pack_size": 2
},
"listings": [
{
"vendor": "Chris' Rocket Supplies",
"url": "https://β¦", // where to buy it
"status": "in_stock", // | "out_of_stock" | "special_order" | "unknown"
"price_cents": 3499,
"unit_price_cents": 3499, // sticker Γ· pack_size
"pack_size": 1,
"stock_count": null, // units on hand, when published
"last_seen": "2026-06-19T04:00:55Z"
}
]
}See the full field reference on GitHub for every field.
Examples
# Cheapest in-stock H motors right now
curl -s https://motor.fusionspace.co/api/v1/in-stock.json \
| jq '.motors[] | select(.impulse_class=="H")
| {designation, from: .cheapest_in_stock.unit_price_cents,
vendor: .cheapest_in_stock.vendor}'// Browser β CORS is open
const res = await fetch("https://motor.fusionspace.co/api/v1/in-stock.json");
const { motors } = await res.json();
const cti54 = motors.filter(
(m) => m.manufacturer === "Cesaroni Technology" && m.diameter_mm === 54,
);Data licence
The API's responses, and the compilation of motor, listing, stock and price data in them, are licensed under Creative Commons Attribution 4.0 International (CC BY 4.0). Attribute it as: βMotor stock data from motor.fusionspace.coβ. Caching responses and storing recorded responses (for example as software test fixtures) is permitted under the licence.
Vendor names, prices, stock levels and product links are factual information gathered from the listed retailers, provided as-is, with no warranty of accuracy or availability; trademarks belong to their owners.
Terms
Use of the data is covered by the data licence above. The data is aggregated from public vendor listings and ThrustCurve β verify stock and price on the vendor's own page before relying on it.
Please use this API rather than scraping the vendors directlyβ that's what it's for, and it keeps load off the shops. Cache a copy and poll meta.json for changes.
There's no per-key or per-IP rate limit. Cloudflare's standard automatic abuse protection applies to all traffic, as it does to any site behind a CDN β normal use never encounters it.