Vessel Sanctions Screening API
GET https://arcnautical.com/api/v1/vessels/{imo}/check
with a verdict for that hull — screened against OFAC SDN, OpenSanctions, EU FSD, UN Consolidated and UK OFSI —
plus its ownership opacity and a vetting grade. No key, no account, 100 requests an hour per IP.
A self-serve key adds the full screening record with evidence, fleet screening, standing vessel monitors and signed webhooks,
at 10,000 assessments a month. Every response names the lists that were actually reachable, and an
INCOMPLETE result is never charged. Full documentation →
# any 7-digit IMO number
curl https://arcnautical.com/api/v1/vessels/9169067/check
{
"imo": "9169067",
"sanctions": {
"status": "GREEN",
"detail": "No matches across OFAC SDN, OpenSanctions,
EU FSD, UN Consolidated, UK OFSI for this
vessel's identifiers and current name. …",
"coverageComplete": true,
"coverageGaps": []
},
"ownership": { "opacity": "HIGH", "score": 70 },
"vetting": { "grade": "C", "score": 41, "status": "marginal" },
"assessed": true,
"checkedAt": "2026-09-13T17:10:03.138Z"
}
What the response says
A sanctions status is only as good as the coverage behind it. The API tells you which of the five lists it read for this verdict, in coverageGaps — a source that was unreachable is named, never silently skipped.
| status | Meaning | What produced it |
|---|---|---|
| RED | Confirmed match. | The hull's IMO or MMSI matches a designated entry exactly — identifier-level, not a name guess. |
| AMBER | Needs a human. | At least one name-level or potential match that could not be confirmed on the identifier — manual verification. Name collisions with a different hull are excluded from the verdict and left visible under matches. |
| GREEN | No match found. | No hit across the lists named in detail, for the vessel's identifiers and current name. |
| INCOMPLETE | No verdict is possible. | A mandatory list was unreachable, or the hull's identity could not be resolved from the IMO. Not charged; the keyed response carries a retry_after. |
Scope, stated plainly: prior names are not screened. A hull designated under a former name, in a source record that carries no IMO, will not be matched here — the response says so in every detail string rather than letting a GREEN imply more than it checked.
OFAC vessel screening API
OFAC's SDN list carries vessel entries with IMO numbers. An entity-screening API that matches names will miss a tanker that has been renamed twice since designation; a vessel-native API keys on the IMO, which survives renaming and reflagging. The scale of the problem, from our published datasets:
The numbers above are read from the same CC BY 4.0 datasets the API is built on and refresh with them; each carries its own as-of date. All datasets →
Check if a vessel is sanctioned by IMO — from code
const res = await fetch(
'https://arcnautical.com/api/v1/vessels/9169067/check'
);
const v = await res.json();
console.log(v.sanctions.status, v.sanctions.coverageGaps);
import requests
v = requests.get(
"https://arcnautical.com/api/v1/vessels/9169067/check",
timeout=15,
).json()
print(v["sanctions"]["status"], v["sanctions"]["coverageGaps"])
curl -X POST https://arcnautical.com/api/v1/screenings \ -H "Authorization: Bearer $ARC_API_KEY" \ -H "Content-Type: application/json" \ -d '{"imo":"9169067","customer_reference":"fixture-4471"}'
claude mcp add arcnautical -- npx -y @arcnautical/mcp
# keyless tools work with no env; add ARC_API_KEY for the rest
Pace yourself from the headers: every response carries X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset, on 200s and on 4xx alike. OpenAPI 3.1 · Postman collection · AGENTS.md
Sanctions screening API for ships — who calls it, and when
Before fixture and again before the bill of lading. Screen the nominated hull, then put it on a monitor for the life of the voyage so a mid-voyage designation reaches you as a webhook, not a news alert.
Before delivering fuel, lubricants or stores alongside. A sanctioned recipient hull is a sanctions exposure for the supplier; one GET per nomination closes it.
At the moment a hull enters a circular. Screening the IMO takes less time than typing the vessel's name into a search engine, and the result is defensible.
When the carrier's vessel schedule is published. Batch the week's hulls with POST /api/v1/screening-batches and read the exceptions.
At entry, renewal and each trade-finance drawdown. Register the insured or financed fleet once, refresh it on your cadence, and read /fleets/{id}/changes.
On nomination and again at arrival. Ownership opacity and the vetting grade arrive in the same response as the sanctions verdict.
From a verdict to a screening program
POST /api/v1/screenings — the recordThe same engine, returning everything behind the verdict: each match with the source entry it came from, how the hull's identity was resolved, and notices[] that say in words why a result is AMBER or INCOMPLETE and what would clear it. Retrievable by id for as long as your account's retention setting keeps it.
POST /api/v1/fleets — the bookRegister the hulls you are exposed to once. /refresh screens every one of them; /exposure summarises the fleet; /changes lists what moved since your last read, so an integration polls one feed instead of re-screening 300 hulls.
POST /api/v1/vessel-monitors — the watchA standing monitor re-screens a hull on a schedule and delivers a signed webhook when its verdict changes. /simulate fires a test event so you can verify your receiver before anything real happens.
Both key environments run production scoring against production lists; the environment only partitions quota, idempotency and webhook namespaces. Live carries 10,000 assessments a month, test 1,000. Neither is a trial and neither expires.
Questions
Yes. GET https://arcnautical.com/api/v1/vessels/{imo}/check needs no API key and no account, serves 100 requests an hour per IP, and returns a sanctions verdict for the vessel together with the lists that were screened. Results are cached for an hour, are not retained against any customer and consume no quota.
OFAC SDN, OpenSanctions, the EU Financial Sanctions Database (EU FSD), the UN Security Council Consolidated List and the UK OFSI list. Every response names which of the five were reachable when the verdict was computed; a missing one is listed in coverageGaps, never silently skipped.
By IMO first. An exact IMO or MMSI match to a designated entry is RED. A name-only hit is AMBER, and a name that collides with a different hull is excluded from the verdict and left visible under matches for review. Prior names are not screened: a hull designated under a former name in a source record that carries no IMO will not be matched.
Not for the verdict. The keyless check returns the sanctions status, ownership opacity and vetting grade. An API key is needed for the full screening record with evidence, fleet screening, standing monitors and webhooks. Keys are self-serve; a live key carries 10,000 assessments a month, a test key 1,000, and an INCOMPLETE result is never charged.
Register the hulls once with POST /api/v1/fleets (a name plus a list of IMOs), then POST /api/v1/fleets/{id}/refresh screens every hull and GET /api/v1/fleets/{id}/changes lists what moved since your last read. For a one-off list without a fleet, POST /api/v1/screening-batches takes the IMOs directly. Standing vessel monitors re-screen on a schedule and deliver a signed webhook when a verdict changes.
The check is keyless and the key is self-serve. Nobody will call you.