Quickstart

First call in five minutes

1. Create an API key

In the Skiff web app, open Account → Developer and create a key. Keys are available on the Captain and Admiral plans. The key is shown once; store it like a password. Default scopes are read:vessel and write:log.

2. List your vessels

curl https://binranoynwqpydttvgbs.supabase.co/functions/v1/public-api/v1/vessels \
  -H "Authorization: Bearer sk_live_..."

3. Read the due feed

The due feed is the same computation the app uses: each maintenance task goes due when its time interval or its engine-hours interval trips, anchored on the last matching service entry.

curl https://binranoynwqpydttvgbs.supabase.co/functions/v1/public-api/v1/vessels/VESSEL_ID/due \
  -H "Authorization: Bearer sk_live_..."

{
  "vessel_id": "…",
  "engine_hours": 412,
  "items": [
    { "task_id": "…", "title": "Impeller", "status": "due_soon",
      "due_date": "2026-08-02T00:00:00.000Z", "due_hours": 450 }
  ]
}

4. Log a service

curl -X POST https://binranoynwqpydttvgbs.supabase.co/functions/v1/public-api/v1/vessels/VESSEL_ID/service-log \
  -H "Authorization: Bearer sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{"title": "Replaced impeller", "route": "diy", "engine_hours": 415}'

5. Push engine hours

Hours must not go backwards; the API rejects a value below the vessel's current meter.

curl -X POST https://binranoynwqpydttvgbs.supabase.co/functions/v1/public-api/v1/vessels/VESSEL_ID/hours \
  -H "Authorization: Bearer sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{"hours": 418}'

Dossier embeds and badges

Every vessel with a shared dossier (QR sticker link /v/{token}) also has an iframe card and an SVG badge. They respect the owner's share toggles: revoke the share and both go private.

<!-- live card, ~420x220 -->
<iframe src="https://skiff.boatsmarthq.com/embed/TOKEN"
        width="420" height="220" style="border:0"></iframe>

<!-- badge for listings and signatures -->
<a href="https://skiff.boatsmarthq.com/v/TOKEN">
  <img src="https://skiff.boatsmarthq.com/api/badge/TOKEN" alt="Maintained on Skiff" />
</a>

<!-- oEmbed discovery -->
https://skiff.boatsmarthq.com/api/oembed?url=https://skiff.boatsmarthq.com/v/TOKEN

Signal K plugin

Boats running a Signal K server can send engine hours and sensor readings automatically with the signalk-skiffplugin: install it from the Signal K app store (or npm) and paste the connection key from the vessel's Connections page. Nothing else needs configuring. Source lives in the packages/signalk-skiff folder of this portal's repository.

NMEA 2000 and other engine makes

Volvo Penta, Yanmar, Mercury SmartCraft, Caterpillar, Cummins and other J1939 engines reach NMEA 2000 through a gateway, and Skiff reads them from there. No arrangement with the engine maker is needed. See the telemetry page for the full metric list and the push format.

Rate limits

60 requests per minute per key by default (HTTP 429 beyond it). AI analysis is metered separately; see the AI API page.