Axiomancer
API reference — Overview

Campaign scoring

Fetch multi-window campaign risk scores for a vessel by IMO, with time-decay weighting across watchlist categories for sanctions and dark-fleet triage.

Multi-window vessel risk scoring with time-decay weighting and watchlist subscription.

Campaign scores aggregate seven signal types — spoofing, temporal motifs, STS transfers, dark events, destination deceptions, lifecycle changes, and PSC inspections — into a single 0–1 risk score per vessel. Scores are computed across 30, 90, and 180-day windows with exponential time decay so recent activity weighs more heavily.

GET /api/v1/vessels/{imo}/campaign-score

No API key or session required — this endpoint is unauthenticated.

Get the campaign risk score for a vessel.

Parameters

NameTypeRequiredDescription
imostring7-digit IMO number (path param)

Response

{
  "imo": 9876543,
  "score": {
    "overall_score": 0.64,
    "risk_level": "high",
    "window_30": 0.72,
    "window_90": 0.64,
    "window_180": 0.51,
    "reference_date": "2026-04-18T00:00:00Z"
  },
  "isSubscribed": true
}

imo is returned as a number, and score is null when no campaign score has been computed yet for the vessel.

Errors

  • 400 — Invalid IMO number format
  • 500 — Database error retrieving the campaign score

Risk levels

LevelScore rangeDescription
critical> 0.75Multiple corroborated high-severity signals
high0.50 – 0.75Significant recent risk activity
medium0.25 – 0.50Moderate or aging signals
low< 0.25Minimal risk indicators

Signal weights

Each signal type contributes differently to the aggregate score:

Signal typeWeight
Spoofing alert0.80
Destination deception0.70
Temporal motif0.60
STS transfer0.50
Dark event0.40
Lifecycle change0.30
PSC inspection0.20

Severity multipliers (low = 0.5×, medium = 1×, high = 1.5×, critical = 2×) and signal confidence also factor into the final score.

Example

curl -X GET -H "X-API-Key: YOUR_KEY" \
  https://www.axiomoverwatch.io/api/v1/vessels/9876543/campaign-score

POST /api/v1/vessels/{imo}/campaign-score

Requires a signed-in dashboard session (Supabase auth cookie) — not an API key.

Subscribe or unsubscribe a vessel to your watchlist directly from the campaign score view.

Parameters

NameTypeRequiredDescription
imostring7-digit IMO number (path param)
actionstring'subscribe' or 'unsubscribe'
watchlist_idstringTarget watchlist. Must be owned by the caller. Creates "Default Watchlist" if omitted.

Response

{ "success": true }

Errors

  • 400 — Invalid IMO number format
  • 400watchlist_id is empty
  • 400action must be subscribe or unsubscribe
  • 401 — Unauthorized (no signed-in session)
  • 403 — Forbidden (watchlist_id not owned by the caller)
  • 404 — Watchlist not found
  • 500 — Database error (score fetch, watchlist create/update)

Example

curl -X POST -H "X-API-Key: YOUR_KEY" \
  https://www.axiomoverwatch.io/api/v1/vessels/9876543/campaign-score \
  -d '{"action":"subscribe"}'
Was this page helpful?

On this page