Back to Docs

Maritime & Telecom Compliance

Verify vessel registrations, check C-TPAT membership, search FCC radio licenses, and screen maritime entities against federal watchlists — all through the ComplianceGrid API.

Reading time: 7 minLast updated: Feb 2026

Use Cases

Maritime Due Diligence

Screen vessels and owners before chartering, port calls, or cargo bookings to ensure sanctions compliance.

C-TPAT Partner Validation

Verify importer/carrier C-TPAT membership for expedited customs processing and reduced inspections.

FCC License Verification

Verify radio licenses for maritime ship stations, broadcast stations, and wireless carriers.

Port Security Compliance

Screen inbound vessels and operators against OFAC sanctioned vessel lists before granting port access.

Workflow Steps

Step 1: Vessel Search

Search for vessels by IMO number, MMSI, vessel name, or flag state. Verify registration, ownership, and flag details.

Step 2: C-TPAT Verification

Verify Customs-Trade Partnership Against Terrorism (C-TPAT) membership for importers, carriers, and brokers. C-TPAT members receive expedited customs processing.

Step 3: FCC License Search

Search the FCC Universal Licensing System (ULS) for radio station licenses — including maritime ship stations, aviation ground stations, and commercial radio.

Step 4: Sanctions Screening

Screen vessel owners, operators, and flag states against OFAC SDN (which includes sanctioned vessels by IMO number) and other federal watchlists.

Step 1: Vessel Search

Search for vessels by IMO number (unique 7-digit identifier), MMSI (Maritime Mobile Service Identity), vessel name, or flag state.

1-vessel-search.ts
import ComplianceGrid from "@compliancegrid/sdk";

const cg = new ComplianceGrid({
  apiKey: process.env.COMPLIANCEGRID_API_KEY,
});

// Search by IMO number
const vessel = await cg.maritime.vesselSearch({
  imoNumber: "9321483",
});

const v = vessel.data.results[0];
console.log("Vessel:", v.vesselName);
console.log("IMO:", v.imoNumber);
console.log("MMSI:", v.mmsi);
console.log("Flag:", v.flagState);
console.log("Type:", v.vesselType);
console.log("Gross Tonnage:", v.grossTonnage);
console.log("Owner:", v.registeredOwner);
console.log("Operator:", v.operator);
console.log("Classification:", v.classificationSociety);
console.log("Year Built:", v.yearBuilt);

// Search by vessel name
const results = await cg.maritime.vesselSearch({
  vesselName: "Ever Given",
});
console.log(`Found ${results.data.totalResults} matching vessels`);

// Search by flag state
const flaggedVessels = await cg.maritime.vesselSearch({
  flagState: "PA", // Panama
  limit: 10,
});

Step 2: C-TPAT Verification

C-TPAT (Customs-Trade Partnership Against Terrorism) is a voluntary CBP program. Members receive reduced inspections, priority processing, and front-of-line privileges.

2-ctpat-verify.ts
// Verify C-TPAT membership
const ctpat = await cg.maritime.ctpatVerify({
  companyName: "Maersk Line",
});

console.log("Company:", ctpat.data.companyName);
console.log("C-TPAT Member:", ctpat.data.isMember);
console.log("Membership Status:", ctpat.data.status); // "ACTIVE", "SUSPENDED", "NOT_FOUND"
console.log("Tier:", ctpat.data.tier); // "Tier 1", "Tier 2", "Tier 3"
console.log("Valid Through:", ctpat.data.validThrough);

if (!ctpat.data.isMember) {
  console.warn("Not a C-TPAT member — standard customs processing applies");
}

// Also verify by SVI (Status Verification Interface) number
const byNumber = await cg.maritime.ctpatVerify({
  sviNumber: "CT-12345",
});

Tier 1

Basic membership — reduced inspections, front-of-line processing

Tier 2

Enhanced — further reduced exams, priority FAST lane access

Tier 3

Top tier — lowest exam rates, green lane customs clearance

Step 3: FCC License Search

Search the FCC Universal Licensing System (ULS) for radio station licenses. This covers maritime ship stations, aviation ground stations, amateur radio, and commercial wireless licenses.

3-fcc-search.ts
// Search FCC ULS by callsign
const license = await cg.fcc.ulsSearch({
  callsign: "WDA1234",
});

const lic = license.data.results[0];
console.log("Callsign:", lic.callsign);
console.log("Licensee:", lic.licenseeName);
console.log("Service:", lic.serviceDescription); // "Ship Station", "Land Mobile", etc.
console.log("Status:", lic.licenseStatus); // "Active", "Expired", "Cancelled"
console.log("Grant Date:", lic.grantDate);
console.log("Expiration:", lic.expirationDate);
console.log("Frequency:", lic.frequency);

// Search by licensee name
const byName = await cg.fcc.ulsSearch({
  licenseeName: "Carnival Corporation",
});
console.log(`Found ${byName.data.totalResults} FCC licenses`);

// Search by service type
const shipStations = await cg.fcc.ulsSearch({
  serviceCode: "SA", // Ship Station (Voluntary)
  state: "FL",
  limit: 20,
});

Step 4: Maritime Sanctions Screening

OFAC's SDN list includes sanctioned vessels identified by IMO number. Screen both the vessel and its owner/operator.

4-maritime-screening.ts
// Screen the vessel owner and operator
const screening = await cg.compliance.screenParties([
  {
    name: v.registeredOwner,
    country: v.flagState,
    type: "COUNTERPARTY",
  },
  {
    name: v.operator,
    country: v.flagState,
    type: "COUNTERPARTY",
  },
  {
    // Also screen the vessel name itself — OFAC lists sanctioned vessels
    name: v.vesselName,
    type: "VESSEL",
    identifiers: [{ type: "IMO", value: v.imoNumber }],
  },
]);

if (screening.data.overallResult === "HIT") {
  console.error("SANCTIONS HIT — vessel or owner/operator is sanctioned");
  for (const r of screening.data.results) {
    if (r.matchCount > 0) {
      console.error(`  ${r.party.name}: ${r.matchCount} matches`);
      for (const m of r.matches) {
        console.error(`    ${m.source}: ${m.name} (score: ${m.matchScore})`);
      }
    }
  }
} else {
  console.log("All clear — vessel, owner, and operator pass sanctions screening");
}
Critical: OFAC specifically lists sanctioned vessels by IMO number. Screening only by company name is insufficient — always check the vessel itself. Flag states like Iran, North Korea, Syria, and Cuba carry elevated risk.

Complete Maritime Verification

verify-vessel.ts
async function verifyVessel(imoNumber: string) {
  // Step 1: Look up vessel
  const vessel = await cg.maritime.vesselSearch({ imoNumber });
  const v = vessel.data.results[0];
  if (!v) return { valid: false, reason: "Vessel not found" };

  // Step 2: Check flag state risk
  const highRiskFlags = ["KP", "IR", "SY", "CU"]; // North Korea, Iran, Syria, Cuba
  const flagRisk = highRiskFlags.includes(v.flagState) ? "HIGH" : "LOW";

  // Step 3: Screen vessel + owner + operator
  const screening = await cg.compliance.screenParties([
    { name: v.registeredOwner, country: v.flagState, type: "COUNTERPARTY" },
    { name: v.vesselName, type: "VESSEL" },
  ]);

  // Step 4: Check C-TPAT if applicable
  let ctpatStatus = "NOT_CHECKED";
  if (v.operator) {
    try {
      const ctpat = await cg.maritime.ctpatVerify({ companyName: v.operator });
      ctpatStatus = ctpat.data.isMember ? "MEMBER" : "NOT_MEMBER";
    } catch { ctpatStatus = "NOT_FOUND"; }
  }

  return {
    valid: screening.data.overallResult !== "HIT" && flagRisk !== "HIGH",
    vessel: v.vesselName,
    imo: imoNumber,
    flag: v.flagState,
    flagRisk,
    owner: v.registeredOwner,
    sanctionsClear: screening.data.overallResult !== "HIT",
    ctpatStatus,
    verifiedAt: new Date().toISOString(),
  };
}

const result = await verifyVessel("9321483");
console.log(result.valid ? "VESSEL CLEARED" : "VESSEL BLOCKED");

Regulatory Context

  • • OFAC maintains a list of sanctioned vessels identified by IMO number — check before any port call or cargo booking.
  • • The Maritime Transportation Security Act (MTSA) requires screening of vessels and cargo for security threats.
  • • C-TPAT is a voluntary CBP program — non-membership is not a compliance failure, but members receive processing benefits.
  • • FCC ship station licenses are required for maritime radio communications under 47 CFR Part 80.
  • • Flag state sanctions (Iran, North Korea, Syria, Cuba) may prohibit all transactions regardless of vessel-level screening.
Export Compliance Guide

Party screening through AES filing

Maritime API Reference

Full endpoint documentation