Marine Catalog · Developer API

Marine Catalog API v1.0

A fast, structured read API for boat & marine-engine makes, series and models — current and discontinued. Every model carries rich specifications, gated by your plan tier.

Apply for a key →https://smabatsregistret.se/wp-json/marine-catalog/v1
11endpoints
3data tiers
RESTJSON over HTTPS

1 Authentication

Send your API key as a bearer token on every request. Keys are issued per account — the secret is shown once at creation and looks like mk_live_… (or mk_test_… for the test environment).

curl -H "Authorization: Bearer mk_live_xxxxxxxx" \
     "https://smabatsregistret.se/wp-json/marine-catalog/v1/boat/models?q=nimbus"

You can also pass the key as an X-API-Key header. Requests without a valid key return 401. Resources are referenced only by uid — chain make → series → model with make_uid, series_uid and uid.

2 Plans & tiers

The depth of fields returned scales with your plan's data tier. Every list response reports the tier it was served at.

free

Identity & classification — name, make, series, category, length overall, production years, image.

standard

The full specification sheet — beam, draft, capacities, power, rig/keel, cylinders/displacement & the long-tail specs object.

premium

Everything, including data provenance (source, source_url) for auditing & attribution.

See current pricing and request access on the API access page.

3 Rate limits & quotas

Each plan has a per-minute rate limit, a monthly request quota and a monthly token budget. Every response carries the relevant counters as headers:

HeaderMeaning
X-RateLimit-Limit / -Remaining / -ResetPer-minute window: cap, calls left, seconds until reset.
X-Quota-Limit / -RemainingMonthly request quota (omitted when unlimited).
X-Token-Cost / -Limit / -Used / -RemainingWeighted token budget; premium responses cost 2×.

Exceeding the per-minute limit or monthly request quota returns 429 (with Retry-After on rate limits). Exhausting the monthly token budget returns 402.

4 Errors

Errors are JSON with a stable code and a human message.

{
  "code": "quota_exceeded",
  "message": "Monthly quota (50000) exhausted."
}
StatusMeaning
400Missing or invalid parameter.
401Missing, invalid, expired or revoked key.
403Account suspended, or key lacks the required scope.
404No such resource.
429Per-minute rate limit or monthly quota exceeded.
402Monthly token budget exhausted.

5 Boats

GET /boat/makes
List boat manufacturers
Query parameters
NameTypeReq.Description
qstringnoFree-text filter on manufacturer name.
Request
curl -H "Authorization: Bearer mk_live_xxxxxxxx" \
     "https://smabatsregistret.se/wp-json/marine-catalog/v1/boat/makes?q=nimbus"
Response · 200
{
  "makes": [
    { "uid": "01J7…", "name": "Nimbus", "country": "SE", "is_popular": true }
  ]
}
GET /boat/series
List boat series
Query parameters
NameTypeReq.Description
make_uidstringnoRestrict to one manufacturer (its uid).
Request
curl -H "Authorization: Bearer mk_live_xxxxxxxx" \
     "https://smabatsregistret.se/wp-json/marine-catalog/v1/boat/series?make_uid=01J7…"
Response · 200
{
  "series": [
    { "uid": "01J7…", "name": "T-serien", "boat_category": "motorboat", "year_from": 2014 }
  ]
}
GET /boat/models
Search boat models
Query parameters
NameTypeReq.Description
make_uidstringnoFilter by manufacturer uid.
series_uidstringnoFilter by series uid.
qstringnoFree-text across model, series and make.
boat_categorystringnosailboat · motorboat · rib · inflatable · pwc · dinghy · canoe_kayak · houseboat · tender · other
propulsion_classstringnosail · power · oar_paddle · hybrid
design_categorystringnoCE design category A–D.
in_productionbooleannotrue = current models only, false = discontinued only.
loa_minnumbernoMinimum length overall, metres.
loa_maxnumbernoMaximum length overall, metres.
year_fromintegernoEarliest production year.
year_tointegernoLatest production year.
limitintegerno1–200, default 50.
offsetintegernoPagination offset, default 0.
Request
curl -H "Authorization: Bearer mk_live_xxxxxxxx" \
     "https://smabatsregistret.se/wp-json/marine-catalog/v1/boat/models?q=t11"
Response · 200
{
  "models": [
    {
      "uid": "01J7…",
      "manufacturer": "Nimbus",
      "series": "T-serien",
      "name": "T11",
      "boat_category": "motorboat",
      "design_category": "B",
      "loa_m": 11.28,
      "year_from": 2018,
      "is_in_production": true
    }
  ],
  "total": 1,
  "limit": 50,
  "offset": 0,
  "has_more": false,
  "tier": "free",
  "visibility": "published"
}
GET /boat/model
Get one boat model
Query parameters
NameTypeReq.Description
uidstringyesThe model uid (from a list response).
Request
curl -H "Authorization: Bearer mk_live_xxxxxxxx" \
     "https://smabatsregistret.se/wp-json/marine-catalog/v1/boat/model?uid=01J7…"
Response · 200
{
  "uid": "01J7…",
  "manufacturer": "Nimbus",
  "series": "T-serien",
  "name": "T11",
  "boat_category": "motorboat",
  "loa_m": 11.28,
  "beam_m": 3.47,
  "draft_max_m": 0.95,
  "max_persons": 12,
  "berths": 4,
  "cabins": 2,
  "fuel_capacity_l": 730,
  "power_max_hp": 800,
  "specs": { }
}
GET /hin/decode
Decode a Hull Identification Number
Query parameters
NameTypeReq.Description
hinstringyesThe HIN to decode.
domainstringnoboat (default) or engine.
Request
curl -H "Authorization: Bearer mk_live_xxxxxxxx" \
     "https://smabatsregistret.se/wp-json/marine-catalog/v1/hin/decode?hin=SE-ABC12345D404"
Response · 200
{
  "decoded": { "valid": true, "errors": [] },
  "tier": "free"
}

6 Engines

GET /engine/makes
List engine manufacturers
Query parameters
NameTypeReq.Description
qstringnoFree-text filter on manufacturer name.
Request
curl -H "Authorization: Bearer mk_live_xxxxxxxx" \
     "https://smabatsregistret.se/wp-json/marine-catalog/v1/engine/makes?q=volvo"
Response · 200
{
  "makes": [
    { "uid": "01J7…", "name": "Nimbus", "country": "SE", "is_popular": true }
  ]
}
GET /engine/series
List engine series
Query parameters
NameTypeReq.Description
make_uidstringnoRestrict to one manufacturer (its uid).
Request
curl -H "Authorization: Bearer mk_live_xxxxxxxx" \
     "https://smabatsregistret.se/wp-json/marine-catalog/v1/engine/series?make_uid=01J7…"
Response · 200
{
  "series": [
    { "uid": "01J7…", "name": "T-serien", "boat_category": "motorboat", "year_from": 2014 }
  ]
}
GET /engine/models
Search engine models
Query parameters
NameTypeReq.Description
make_uidstringnoFilter by manufacturer uid.
qstringnoFree-text across model, series and make.
engine_categorystringnopropulsion · auxiliary · generator · bow_thruster · trolling
drive_typestringnooutboard · inboard · sterndrive · jet · saildrive · electric_pod
fuel_typestringnopetrol · diesel · electric · hybrid · lpg · none · other
is_electricbooleannoRestrict to electric engines.
power_minintegernoMinimum power, hp.
power_maxintegernoMaximum power, hp.
year_fromintegernoEarliest production year.
limitintegerno1–200, default 50.
offsetintegernoPagination offset, default 0.
Request
curl -H "Authorization: Bearer mk_live_xxxxxxxx" \
     "https://smabatsregistret.se/wp-json/marine-catalog/v1/engine/models?q=d2-40"
Response · 200
{
  "models": [
    {
      "uid": "01J7…",
      "manufacturer": "Volvo Penta",
      "series": "D-serien",
      "name": "D2-40",
      "engine_category": "propulsion",
      "fuel_type": "diesel",
      "drive_type": "inboard",
      "power_hp": 40,
      "year_from": 2005
    }
  ],
  "total": 1,
  "limit": 50,
  "offset": 0,
  "has_more": false,
  "tier": "free",
  "visibility": "published"
}
GET /engine/model
Get one engine model
Query parameters
NameTypeReq.Description
uidstringyesThe model uid (from a list response).
Request
curl -H "Authorization: Bearer mk_live_xxxxxxxx" \
     "https://smabatsregistret.se/wp-json/marine-catalog/v1/engine/model?uid=01J7…"
Response · 200
{
  "uid": "01J7…",
  "manufacturer": "Volvo Penta",
  "name": "D2-40",
  "engine_category": "propulsion",
  "fuel_type": "diesel",
  "drive_type": "inboard",
  "power_hp": 40,
  "power_kw": 29,
  "cylinders": 3,
  "displacement_cc": 1130,
  "rpm_max": 3600,
  "weight_kg": 168
}

7 Account

GET /me
Inspect your key, plan, tier and remaining quota
Request
curl -H "Authorization: Bearer mk_live_xxxxxxxx" \
     "https://smabatsregistret.se/wp-json/marine-catalog/v1/me"
Response · 200
{
  "account": { "uid": "01J7…", "name": "Acme Marine", "status": "active" },
  "plan": { "name": "Standard", "slug": "standard", "data_tier": "standard" },
  "tier": "standard",
  "rate": { "limit": 120, "remaining": 119, "reset_seconds": 42 },
  "quota": { "limit": 50000, "used": 12, "remaining": 49988 }
}

8 Change feed

GET /events
Poll catalogue changes since a cursor — requires the "events" scope
Query parameters
NameTypeReq.Description
sinceintegernoReturn events with id greater than this cursor. Default 0.
limitintegerno1–500, default 100.
Request
curl -H "Authorization: Bearer mk_live_xxxxxxxx" \
     "https://smabatsregistret.se/wp-json/marine-catalog/v1/events?since=4800"
Response · 200
{
  "events": [
    {
      "id": 4821,
      "uid": "01J7…",
      "entity_type": "boat_model",
      "entity_uid": "01J7…",
      "event": "updated",
      "created_at": "2026-09-08T10:15:00Z"
    }
  ],
  "cursor": 4821,
  "has_more": false
}