The UK boat register. New, and built in the open: it grows as owners and providers add to it.
BOATREGISTER

For providers

The API, on one page

Three reads and two writes. Every call carries your key in the x-api-key header. 60 calls a minute per key. JSON in, JSON out. Every write is logged in your organisation's name.

Get a key

Authentication

The key is shown once in the portal. Send it on every call. A missing or wrong key gets a 401 with a sentence saying so.

curl https://boatregister.co.uk/api/v1/hin/GBDMA10000A505 \
  --header "x-api-key: YOUR KEY"

Read: decode and look up a hull number

GET https://boatregister.co.uk/api/v1/hin/{hin}

{
  "ok": true,
  "hin": "GBDMA10000A505",
  "valid": true,
  "problems": [],
  "country": "GB",
  "builderCode": "DMA",
  "builder": { "name": "Demo Boatworks A", "source": "demo data" },
  "serial": "10000",
  "month": 1,
  "yearBuilt": 2005,
  "modelYear": 2005,
  "onRegister": true,
  "registeredAt": "2026-09-24T01:00:00.000Z",
  "demo": true,
  "activeFlags": 0
}

Read: a boat record

GET https://boatregister.co.uk/api/v1/boats/{hin}. What the public page shows. Never an owner's name or email.

{
  "ok": true,
  "boat": {
    "hin": "GBDMA10411D808",
    "name": "Lady Grey",
    "type": "RIB",
    "builder": "Demo Boatworks A",
    "year": 2008,
    "lengthM": 9.9,
    "source": "Registered by the owner",
    "hasOwner": true,
    "proofOnFile": false,
    "registeredAt": "2026-09-24T01:00:00.000Z",
    "photos": [],
    "flags": [
      {
        "kind": "FINANCE",
        "active": true,
        "reporterLabel": "Demo Marine Finance",
        "reference": "DEMOAGR1003",
        "reportedAt": "2026-04-05T00:00:00.000Z",
        "clearedAt": null
      }
    ]
  }
}

Read: the flags on a boat

GET https://boatregister.co.uk/api/v1/boats/{hin}/flags. Active and cleared, each with who placed it and when.

Write: add or update boats

POST https://boatregister.co.uk/api/v1/boats with one object or an array. Only hin is required. A row may carry a flag too.

curl https://boatregister.co.uk/api/v1/boats \
  --header "x-api-key: YOUR KEY" \
  --header "content-type: application/json" \
  --data '[
    { "hin": "GBDMA99999A505", "name": "New Boat", "type": "MOTOR", "year": "2005", "length": "7.5" },
    { "hin": "GBDMB88888B606", "flag": "FINANCE", "reference": "AGR12345", "note": "Marine mortgage, started today." }
  ]'

{ "ok": true, "boatsCreated": 2, "boatsUpdated": 0, "flagsAdded": 1, "flagsCleared": 0, "skipped": [] }

Write: add or clear a flag

POST https://boatregister.co.uk/api/v1/flags with hin. flag is STOLEN, FINANCE or WRITTENOFF. action is add, the default, or clear. You can only clear a flag your own organisation placed.

curl https://boatregister.co.uk/api/v1/flags \
  --header "x-api-key: YOUR KEY" \
  --header "content-type: application/json" \
  --data '{ "hin": "GBDMB88888B606", "flag": "FINANCE", "action": "clear", "note": "Settled in full." }'

The CSV, same names

Upload it in the portal. Header row, then one boat per line. Only hin is required. Type is MOTOR, SAIL, NARROWBOAT, RIB, DINGHY, JETSKI or OTHER.

hin,name,type,builder,year,length,flag,action,reference,note
GBDMA99999A505,New Boat,MOTOR,Demo Boatworks A,2005,7.5,,,,
GBDMB88888B606,,,,,,FINANCE,add,AGR12345,Marine mortgage started today
GBDMB88888B606,,,,,,FINANCE,clear,AGR12345,Settled in full

Errors and limits