A voyage-risk response is tempting to flatten into one number and a color. That makes a clean table, but it throws away the parts that explain whether the result changed, what caused it, and how much trust to place in it.

The API returns a decision object. This is how to read it.

Score and risk level

score is the composite route-risk value on a 0 to 100 scale. risk_level maps the number into a stable band for display and workflow rules. Use the numeric score for sorting and change detection. Use the level when a user needs a fast label.

Neither field should make an automatic go or no-go decision. The response is decision-support intelligence, and the right action still depends on cargo, vessel, insurance, customer commitments, and the operator's policy.

The assessment has a timestamp

assessed_at says when the underlying route and intelligence sources were evaluated. Always display it. If you compare assessments, compare records produced with the same methodology_version and keep both timestamps.

A useful product message says elevated, assessed 18 minutes ago or up 9 points since booking. A bare elevated label gives the user no way to judge freshness or movement.

Drivers explain the number

The drivers array is ranked by contribution. Each item identifies a source, a plain-language label and summary, an event count where relevant, and a contribution band. The first two or three drivers usually belong next to the score; the full list can sit in a detail panel.

{
  "source": "jwc",
  "label": "Listed-area exposure",
  "summary": "The computed route intersects a current listed area.",
  "event_count": 1,
  "contribution_band": "high",
  "relative_rank": 1
}

Do not infer hidden model weights from the rank. Rank answers a narrower question: which observed factors contributed most to this assessment?

Confidence is not another risk score

confidence describes data completeness for the assessment. A high-risk route can have high confidence. A low score can have reduced confidence when an expected source is unavailable. Those are different axes.

In the UI, keep confidence visually separate from the risk band. For example:

Your own acceptance threshold should match the workflow. A planning dashboard may show partial data with a warning. An automated exception rule may require all critical sources to be healthy.

Read missing sources and source status together

missing_sources is the concise list of unavailable inputs. source_status gives the per-source state. Store both. They let support staff distinguish a genuinely quiet route from an assessment made while one feed was degraded.

A source issue should never become a green result by omission. If a required source is missing, keep the score visible if your policy allows it, but mark the data state and prevent stronger automated claims.

The route is part of the evidence

The response includes normalized port codes, distance, and route geometry. This matters because maritime exposure follows the sea path, not a country-to-country lookup. Two services between the same countries can use different ports or chokepoints and produce different results.

Plot the geometry when a user needs to inspect why a driver applies. If space is tight, at least show the normalized port pair and distance so the user can catch a location-mapping error.

Keep methodology versions with history

methodology_version identifies the response contract and scoring method. Store it with every observation. If ArcNautical changes a model version later, you can explain whether a movement came from new intelligence, a route change, or a methodology update.

A sensible display hierarchy

On a shipment or lane page, put the risk level, score, assessed time, trend, confidence, and top drivers in the first view. Put the source matrix, full driver list, route geometry, methodology, and disclaimer in the detail view. That gives an operations user a fast read without hiding the audit trail.

You can inspect this exact shape without a key. The public playground computes a real route assessment, does not create a retained customer record, and shows both the formatted result and raw JSON.

Inspect a real response

Choose any supported port pair in the playground. The API documentation covers the authenticated response lifecycle and error contract.