Read-only access to 43,000+ motorcycle specifications. Every request needs an API key - contact us to request one.
https://www.motorcycledb.com/api/v1
Every endpoint below is relative to this - e.g. GET /bikes means GET https://www.motorcycledb.com/api/v1/bikes.
Send your key as a Bearer token on every request:
Authorization: Bearer mdb_your_key_here
Requests without a valid key return 401. Each key has a daily request limit - the response headers X-RateLimit-Limit and X-RateLimit-Remaining show your current status. Exceeding your limit returns 429.
Search/list bikes. Query parameters (all optional):
| Parameter | Description |
|---|---|
make | Exact manufacturer name, e.g. Yamaha |
model | Partial model name match |
year | Exact model year |
category | Exact category, e.g. Naked, Adventure |
seat_height_max | Maximum seat height in mm |
page | Default 1 |
per_page | Default 20, max 100 |
curl -H "Authorization: Bearer mdb_your_key_here" \ "https://www.motorcycledb.com/api/v1/bikes?make=Yamaha&category=Naked&per_page=5"
{
"data": [
{ "id": 67350, "make": "Yamaha", "model": "Yamaha MT-09", "year": 2024,
"category": "Naked", "capacity_cc": 889, "power_hp": 117.4,
"seat_height_mm": 825, "url": "https://www.motorcycledb.com/yamaha/mt09/2024/" }
],
"meta": { "page": 1, "per_page": 5, "total": 42, "total_pages": 9 }
}
Full specification for one bike (every field on record), plus its
character profile - editorial "how it rides" scores and best-for/
built-for guidance derived from the spec sheet (null when
no profile has been generated for this bike yet).
curl -H "Authorization: Bearer mdb_your_key_here" \ "https://www.motorcycledb.com/api/v1/bikes/67350"
{
"data": {
"id": 67350, "make": "Yamaha", "model": "Yamaha MT-09", "year": 2024,
"url": "https://www.motorcycledb.com/yamaha/mt09/2024/",
"specs": [
{ "name": "Capacity", "value": "889.0 ccm (54.24 cubic inches)" },
{ "name": "Power", "value": "117.4 HP (87.5 kW) @ 10000 RPM" }
],
"character_profile": {
"scores": { "speed": 76, "agility": 82, "comfort": 58, "offroad": 12, "touring": 41, "road": 74 },
"fit_for": { "track": 68, "city": 71, "cornering": 84, "daily": 66, "touring": 40, "passenger": 45 },
"best_for": "Spirited street riding, twisty backroads, quick city commuting",
"built_for": "...", "not_ideal_for": "...",
"note": "Editorial estimate derived from the spec sheet using the same model for every bike - not lab tested."
}
}
}
Paginated manufacturer list.
curl -H "Authorization: Bearer mdb_your_key_here" "https://www.motorcycledb.com/api/v1/makes?per_page=3"
{
"data": [
{ "id": 4116, "name": "Yamaha", "model_count": 3542, "url": "https://www.motorcycledb.com/yamaha/" }
],
"meta": { "page": 1, "per_page": 3, "total": 495, "total_pages": 165 }
}
Models for one manufacturer - one entry per model, spanning all its production years.
curl -H "Authorization: Bearer mdb_your_key_here" "https://www.motorcycledb.com/api/v1/makes/4116/models?per_page=2"
{
"data": [
{ "name": "Yamaha MT-09", "year_from": 2013, "year_to": 2024,
"model_years_on_record": 9, "url": "https://www.motorcycledb.com/yamaha/mt09/" }
],
"meta": { "page": 1, "per_page": 2, "total": 849, "total_pages": 425 }
}
Safety recall lookup. Query parameters: make, model, year, page, per_page.
curl -H "Authorization: Bearer mdb_your_key_here" "https://www.motorcycledb.com/api/v1/recalls?make=Can-Am&per_page=1"
{
"data": [
{ "campaign_number": "26V575000", "component": "ELECTRICAL SYSTEM: INSTRUMENT CLUSTER/PANEL",
"summary": "...", "consequence": "...", "remedy": "...", "report_date": "2026-09-07",
"bike": { "id": 71234, "make": "Can-Am", "model": "Can-Am Spyder F3", "year": 2025,
"url": "https://www.motorcycledb.com/can-am/spyder-f3/2025/" } }
],
"meta": { "page": 1, "per_page": 1, "total": 6, "total_pages": 6 }
}
Decode a VIN and, when it matches something in our catalog, get the
direct link to it. Full 17-character VINs and partial VINs (at least
the first 8 characters) both work. Decoded entirely from locally-held
NHTSA vPIC data - coverage is US-market motorcycles only, and not
every decoded make/model has a matching catalog page yet (match
is null in that case, which is a normal outcome, not an error).
curl -H "Authorization: Bearer mdb_your_key_here" \ "https://www.motorcycledb.com/api/v1/vin/1HD1KB4177Y653770"
{
"data": {
"vin": "1HD1KB4177Y653770", "make": "Harley-Davidson", "model": "FLHTCU",
"model_year": 2007, "model_year_confident": true,
"match": { "level": "model", "make": "Harley-Davidson", "model": "FLHTCU",
"exact_year_matched": true,
"url": "https://www.motorcycledb.com/harley-davidson/electra-glide-ultra-classic/2007/" }
}
}
{ "error": { "code": "rate_limit_exceeded", "message": "Daily limit of 100 requests exceeded. Try again later." } }