naavra
This page will be machine-translated into Chinese (Traditional) in production. For now it is in English. Languages translated today: Chinese (Simplified), Japanese, Korean, Hindi, Arabic, Spanish, Portuguese (Brazil), French, German, Greek, Indonesian, Tagalog (Filipino).

Developers

Build on Naavra, safely

A versioned API, signed webhooks, connectors to the systems you already run, and a way for your own AI agents to work with Naavra without ever crossing a human-only act.

List your vessels
curl https://api.naavra.com/v1/vessels \
  -H "Authorization: Bearer $AUTOPILOT_TOKEN" \
  -H "Idempotency-Key: <uuid-generated-per-request>"

The open API

Everything you need to integrate

Versioned REST API

A published, versioned API with a clear deprecation policy. Every call is carried out by the owning part of the platform, under its own rules.

Keys you control

Create clients yourself. A key is shown once, stored only as a hash, and can be rotated or revoked at any time.

Least-privilege scopes

Grant only what a client needs. Scopes that would reach a human-only act do not exist; they cannot be granted.

Rate limits and idempotency

Send the same idempotency key and get the same answer. Back off on a 429; usage is visible in your portal.

Signed webhooks

Subscribe to events from the event catalogue. Each delivery is signed with a timestamp, retried, and can be replayed.

Access for AI agents

Your own agents can use Naavra through an agent protocol server. Anything consequential waits for a named person to confirm.

Webhooks

Verify every delivery

Each webhook carries a timestamp and a signature. Check both, reject anything stale, and you know the payload came from Naavra.

  • Retries with back-off, then a dead-letter queue
  • Replay any delivery from your portal
  • A delivery log for every endpoint
Webhook verification
// Verify an Naavra webhook (Node.js)
import crypto from "node:crypto";

export function verify(rawBody, header, secret) {
  const [t, sig] = header.split(",").map(p => p.split("=")[1]);
  if (Math.abs(Date.now() / 1000 - Number(t)) > 300) return false; // stale
  const mac = crypto.createHmac("sha256", secret)
                    .update(`${t}.${rawBody}`).digest("hex");
  return crypto.timingSafeEqual(Buffer.from(mac), Buffer.from(sig));
}

Connectors

Connect the systems you already run

Accounting and ERP

Post and receive through versioned mappings approved by finance, including desktop packages through a small bridge on your network.

Voyage systems

Exchange voyages, positions and results with the commercial systems your desk uses.

Disbursement providers

Pro-forma and final accounts arrive as proposals, matched to the port call, accepted by your desk.

Class and flag portals

Survey status and certificates compared to your records; a difference is raised to a person, never overwritten.

Positions, weather and telemetry

AIS positions, weather and engine data feed operations and maintenance.

Reports and data sharing

A governed data layer, scheduled report packs, BI feeds and warehouse shares, every number with its lineage.

The developer portal

Start in the sandbox

  1. 1
    Request access

    We open a sandbox deployment with a synthetic fleet.

  2. 2
    Create a client

    Choose scopes; the key is shown once.

  3. 3
    Subscribe to events

    Pick events from the catalogue and add your endpoint.

  4. 4
    Pass the conformance check

    Automated checks confirm your client behaves well before it goes live.

Build with us

Tell us what you want to connect. We will open a sandbox with a synthetic fleet.