Parametric cargo insurance has a timing problem. When a container is delayed by port congestion or diverted by a cyclone, days—sometimes weeks—pass while stakeholders compile proof, reconcile versions of “what really happened,” and chase down dataset owners. Meanwhile, the balance sheet carries the latent risk. For freight forwarders building cargo programs and for market analysts producing benchmarks, the friction is rarely about modeling; it’s about defensible, unified event data that everyone will accept.
This post shows how to wire parametric cargo insurance triggers to live logistics intelligence using FreightPulse. With a single REST API, your team can track natural-disruption events around ports, approximate port congestion from AIS-derived series, pull US full‑truckload quotes for pricing context, reference EIA fuel prices for surcharge logic, and verify carriers before assigning liability—all in one schema. That combination is the fastest route from a concept to an auditable, production-grade trigger pipeline.
We’ll build from first principles: define the logistics events that can trigger a parametric clause, map those events to FreightPulse endpoints, and stitch them into a minimal rules engine your claims team can trust and your developers can ship. Along the way, we’ll keep the focus on practical integration details, response fields you’ll actually use, and reliability patterns that prevent false positives and reduce disputes.
Why FreightPulse
FreightPulse consolidates what would otherwise be five separate feeds into a single, consistent JSON surface. Instead of wrangling EIA fuel data, port AIS feeds, a trucking-rate provider, FMCSA/FMC registries, and natural-hazard sources, you query one API and get standardized structures, timestamps, and sources. That matters when your insurance clause needs transparency and a chain of custody for every number in the calculation.
- One API, one schema: Your engineering team replaces multiple vendor SDKs and custom normalizers with one REST client. That shortens implementation time, simplifies observability (single set of logs and metrics), and standardizes error handling for all logistics data types.
- Event coverage you can operationalize: Use the Disruptions feed to detect cyclones or severe weather near a port corridor, pair it with Port Congestion series to define thresholds vs baselines, and fold in live US FTL quotes for cost-index adjustments. Because the responses share the same envelope, your code paths for success, validation, and fallback look the same across endpoints.
- Developer ergonomics with production DNA: It’s easy to adopt, but the platform supports serious reliability: idempotent GETs, consistent success/data/error envelopes, and clear error codes. That makes it straightforward to build retries, circuit breakers, and SLA dashboards without custom case-by-case logic per feed.
- Transparent lag, no hand-waving: Port congestion is explicitly an approximation using IMF PortWatch AIS-derived data with a ~6–7 day lag and a 7‑day average vs a 90‑day baseline. That clarity reduces disputes during claims adjudication because both parties understand the measurement method and window.
Explore the platform at FreightPulse and see how event‑driven logistics data becomes usable the same day your idea hits the backlog.
Quick Start
The FreightPulse base URL is:
https://freightpulsehq.com/api/v1
All endpoints return a consistent envelope with success, data, and (when relevant) an error message. Below is a first request to retrieve national and regional fuel prices—often the first input for surcharge logic or indexation in parametric policies.
curl -s \
-H "X-API-Key: YOUR_API_KEY" \
"https://freightpulsehq.com/api/v1/fuel-prices"
Example JSON response:
{
"success": true,
"data": {
"timestamp": "2026-07-30T12:00:00Z",
"source": "EIA (U.S. Energy Information Administration)",
"currency": "USD",
"unit": "gallon",
"data": {
"diesel": {
"national_average": 3.847,
"change_week": -0.023,
"change_percent": -0.6,
"regions": {
"east_coast": 3.912,
"midwest": 3.756,
"gulf_coast": 3.623,
"rocky_mountain": 3.891,
"west_coast": 4.456,
"california": 4.892
},
"historical": {
"30d_avg": 3.82,
"90d_avg": 3.75,
"yoy_change_percent": -8.2
}
},
"gasoline": {
"national_average": 3.156,
"historical": {
"30d_avg": 3.1,
"90d_avg": 3.05,
"yoy_change_percent": 1.1
}
}
}
}
}
Key fields you will likely use:
- timestamp: Audit point for your trigger evaluation window.
- diesel.national_average and regions.*: Inputs to surcharge logic or benchmarks that adjust payout levels.
- historical.*: Baseline comparison for parametric thresholds (e.g., diesel > 90‑day average + X%).
Core Endpoints for Parametric Cargo Insurance Triggers
Below are the endpoints most frequently used to define, detect, and justify parametric triggers for cargo insurance that depend on operational and natural-disruption events.
1) Disruptions: Natural-hazard events near ports and corridors
Endpoint: GET /disruptions
Use this endpoint to detect cyclones, earthquakes, severe weather, and other natural hazards that may qualify a parametric trigger when they occur within a defined radius of a port or trade lane. Filters let you tighten to specific severity or event types. This is your primary signal for trigger activation tied to exogenous events.
Key query params:
- type: cyclone | earthquake | flood | volcano | drought | wildfire | severe_weather
- severity: low | moderate | high
- country: Country name
- port: Port name or LOCODE (filters by distance; 300 km globally, 100 km for US weather)
Sample request: high-severity events around Los Angeles/Long Beach (USLAX):
curl -s \
-H "X-API-Key: YOUR_API_KEY" \
"https://freightpulsehq.com/api/v1/disruptions?port=USLAX&severity=high"
Sample response:
{
"success": true,
"data": {
"results": [
{
"id": "gdacs:TC:1001305",
"type": "cyclone",
"severity": "moderate",
"title": "Tropical Cyclone SAUDEL-26",
"country": "Japan",
"starts_at": "2026-08-18T12:00:00+00:00",
"source": "GDACS"
}
]
}
}
Field interpretation:
- id: Stable reference you can store to avoid duplicate triggers.
- type and severity: Drive conditional routing (e.g., immediate trigger for high severity, advisory for moderate).
- starts_at: Anchor for your policy window. Combine with shipment ETAs to restrict eligibility.
- source: Provenance to include in claim evidence packages.
2) Port Congestion: Approximations vs baseline to quantify delay conditions
Endpoint: GET /port-congestion
Port congestion is a frequent cause of schedule slips and knock-on costs. This endpoint provides a lagged approximation derived from IMF PortWatch (AIS-based) data. It reports a 7‑day average portcall measure versus a 90‑day baseline with a typical data lag of about 6–7 days. In parametric design, that transparency helps each party know exactly what evidence the trigger references and why it’s not a minute-by-minute AIS feed.
Key query params:
- port: Name or LOCODE (e.g., USLAX)
- country: Name or ISO3
- region: Continent
- congestion: low | moderate | high (optional filter)
Sample request for Los Angeles/Long Beach:
curl -s \
-H "X-API-Key: YOUR_API_KEY" \
"https://freightpulsehq.com/api/v1/port-congestion?port=USLAX"
Sample response:
{
"success": true,
"data": {
"results": [
{
"port": "Los Angeles-Long Beach",
"locode": "US LAX",
"country": "United States",
"congestion": "moderate",
"as_of": "2026-08-14",
"metrics": {
"recent_avg_portcalls_per_day": 8.7,
"baseline_avg_portcalls_per_day": 10.2,
"ratio_vs_baseline": 0.85
}
}
]
}
}
Field interpretation:
- congestion: Qualitative label derived from the ratio vs baseline, convenient for simple threshold rules.
- as_of: Vital for documenting the measurement window used for a trigger.
- metrics.recent_avg_portcalls_per_day and baseline_avg_portcalls_per_day: Let you compute your own thresholds (e.g., ratio < 0.8 sustained over N days).
- ratio_vs_baseline: Out-of-the-box KPI to compare against parametric terms.
3) Freight Rates: Live US FTL quotes for cost-aware triggers and settlement calibration
Endpoint: GET /freight-rates
While many parametric triggers focus on physical events, claims settlement and pricing models often need contemporary cost references. Use live US FTL quotes (via Warp) to calibrate payout schedules or index policy pricing. You can also request limited ocean/air modes for Asian origins into US destinations to gauge intermodal stress.
Key query params for trucking:
- mode: trucking (default), ocean, air
- origin_zip and destination_zip: Required for trucking
- pickup_date, qty, total_weight_lb: Optional for richer quotes
Sample trucking quote:
curl -s \
-H "X-API-Key: YOUR_API_KEY" \
"https://freightpulsehq.com/api/v1/freight-rates?mode=trucking&origin_zip=10001&destination_zip=90210"
Sample response:
{
"success": true,
"data": {
"mode": "trucking",
"service": "FTL (53' dry van)",
"source": "Warp",
"price_usd": 7207.92,
"transit_days": 4,
"pickup_date": "2026-08-24",
"delivery_date": "2026-08-28"
}
}
Field interpretation:
- price_usd: Cost calibration point for payouts or co-insurance terms.
- transit_days, pickup_date, delivery_date: Vital for dynamic trigger windows aligned to expected schedule.
- service and mode: For filtering when different triggers apply to dry van vs other services.
4) Fuel Prices: Indexation for surcharges and payout scaling
Endpoint: GET /fuel-prices
Use EIA-linked diesel/gasoline data to scale payouts or set triggers based on fuel volatility, e.g., “Payout increases by X basis points when diesel exceeds the 90‑day average by Y% during a qualified delay.” Because this endpoint returns national and regional series in the same structure, you can select the granularity your team needs without modifying your parser.
We already previewed a sample response in Quick Start. In production, store the timestamped record alongside the trigger decision to ensure downstream auditability and consistent replays.
5) Carriers: FMCSA/FMC lookups for liability routing and compliance
Endpoint: GET /carriers
Carrier verification is critical to parametric designs that shift or gate payouts based on carrier credentials, safety ratings, or operating status. This endpoint lets you look up US trucking carriers (FMCSA SAFER) or ocean NVOCC/OTI carriers (FMC directory). Air returns available:false—use that signal to prompt a different verification path.
Key query params:
- q: Required—DOT number, org number, or company name
- type: trucking (default) | ocean | air
Sample trucking lookup (by DOT number):
curl -s \
-H "X-API-Key: YOUR_API_KEY" \
"https://freightpulsehq.com/api/v1/carriers?q=54283"
Sample response:
{
"success": true,
"data": {
"type": "trucking",
"query": "54283",
"results": [
{
"dot_number": 54283,
"legal_name": "SWIFT TRANSPORTATION COMPANY OF ARIZONA LLC",
"status": "active",
"safety_rating": "S",
"drivers": 12883,
"address": {
"city": "Phoenix",
"state": "AZ",
"country": "US"
}
}
]
}
}
Field interpretation:
- status and safety_rating: Route triggers differently for suspended or out-of-service carriers.
- drivers: Proxy indicator of scale; useful for risk categorization.
- legal_name and dot_number: Keys to reconcile your TMS/claim system records.
6) Historical: Time series for diesel and port congestion trend analysis
Endpoint: GET /historical
Parametric logic often references a trailing average or comparative baseline. The historical endpoint provides weekly national fuel-price series and daily port-congestion series for ~20 curated ports. This is the easiest way to compute custom thresholds and to render the evidence in a claims dashboard.
Key query params:
- metric: fuel_price_diesel_national | fuel_price_gasoline_national | port_congestion:<portid>
- period: 30d (default) | 90d | 1y
Sample: 30-day diesel series
curl -s \
-H "X-API-Key: YOUR_API_KEY" \
"https://freightpulsehq.com/api/v1/historical?metric=fuel_price_diesel_national&period=30d"
Sample response:
{
"success": true,
"data": {
"metric": "fuel_price_diesel_national",
"period": "30d",
"series": [
{
"date": "2026-07-27",
"value": 5.257
},
{
"date": "2026-08-03",
"value": 5.343
}
]
}
}
Field interpretation:
- series[].date and series[].value: Ready-to-use for moving averages, volatility bands, and visualizations.
- metric: Pin to the calculation record so you can recreate and explain the exact baseline used in a claim.
Field-by-Field: What Matters for Parametric Triggers
Design triggers with these key fields top-of-mind:
- Disruptions: id, type, severity, starts_at, source
- Port Congestion: as_of, metrics.ratio_vs_baseline, congestion
- Freight Rates: price_usd, transit_days, pickup_date, delivery_date
- Fuel Prices: diesel.national_average, historical.90d_avg, timestamp
- Carriers: status, safety_rating, dot_number (or FMC org), legal_name
- Historical: series[].date/value for baselines and trend detection
Most production builds persist the raw JSON in an immutable store (e.g., object storage keyed by trigger id) and cache critical fields in a relational table for fast rule evaluation. Persisting raw payloads greatly reduces dispute cycles because you can present the exact evidence, timestamped, alongside your policy logic.
From Events to Payouts: A Minimal Rule Engine Pattern
A practical pattern for parametric triggers combines Disruptions as the initiating signal with Port Congestion and Historical metrics as context gates, then uses Freight Rates and Fuel Prices to calibrate monetary outcomes. Below is a conceptual flow:
- 1) Poll Disruptions for events near relevant ports every N minutes. Store new ids and enqueue evaluations.
- 2) For each event, fetch Port Congestion for the implicated port(s). If ratio_vs_baseline < 0.9 or congestion == high for the as_of window overlapping shipment ETA, mark condition satisfied.
- 3) Evaluate baselines with /historical (e.g., 90-day diesel average). If fuel volatility exceeds threshold during the delay window, scale payout factor.
- 4) Optionally, fetch /freight-rates for the impacted lane(s) to translate severity into cost indices (e.g., $/mile uplift).
- 5) Verify carriers involved via /carriers to adjust or annotate payout rules by safety rating/status.
- 6) Emit a claims-ready packet: raw responses, computed metrics, decision verdict, and trace ids for observability.
Here is a concise JavaScript example that sketches steps 1–3. Adapt for your scheduler and datastore of choice.
// Minimal Node.js sketch (fetch v3 or node-fetch)
const BASE = "https://freightpulsehq.com/api/v1";
const HEADERS = { "X-API-Key": "YOUR_API_KEY" };
async function getJson(url) {
const res = await fetch(url, { headers: HEADERS });
const body = await res.json();
if (!body.success) throw new Error(body.error || "Request failed");
return body.data;
}
async function evaluatePortTrigger(portLocode, etaDateISO) {
const disruptionsUrl = `${BASE}/disruptions?port=${encodeURIComponent(portLocode)}&severity=high`;
const disrupt = await getJson(disruptionsUrl);
if (!disrupt.results || disrupt.results.length === 0) return { triggered: false, reason: "No qualifying disruptions" };
const congestionUrl = `${BASE}/port-congestion?port=${encodeURIComponent(portLocode)}`;
const congestion = await getJson(congestionUrl);
const record = (congestion.results || [])[0];
if (!record) return { triggered: false, reason: "No congestion record" };
const ratio = record.metrics?.ratio_vs_baseline;
const qualifies = ratio !== undefined && ratio < 0.9; // custom threshold
return {
triggered: qualifies,
evidence: {
disruptions: disrupt.results,
congestion: record
}
};
}
evaluatePortTrigger("USLAX", "2026-08-20T00:00:00Z")
.then(console.log)
.catch(console.error);
This sketch:
- Uses the same envelope validation across endpoints.
- Captures a simple threshold on ratio_vs_baseline.
- Returns both verdict and evidence to reduce disputes.
Reliability, Observability, and Governance Best Practices
When triggers move money, robustness and auditability decide whether your system earns trust. FreightPulse’s consistent response shape, clear error codes, and stable resource semantics make it straightforward to build production-grade controls. Consider:
- Retries and backoff: Only retry idempotent GETs on transient network or 5xx errors. Implement exponential backoff with jitter, and cap attempts. Because all responses share success/data/error, you can gate retries on success === false with a non-4xx code path.
- Circuit breakers: If a specific endpoint exhibits rising latency or error ratios, trip a circuit and fall back to cached baselines (e.g., last-known congestion “as_of” day) while surfacing a “degraded” system banner in your claims UI.
- Health checks: Run a canary request per endpoint on a short interval and publish red/green status to your monitoring stack. Validate envelope shape, not just HTTP 200.
- Idempotency and deduplication: For Disruptions, dedupe by id and do not re-trigger within your policy window unless severity escalates. Store a hash of trigger inputs to make replays deterministic.
- Governance: Issue per-application credentials and log request provenance (app id, purpose) to an audit table. Enforce read-only roles for dashboards versus systems that calculate payouts.
- Data locality: Persist raw JSON in the region where you adjudicate claims if you operate under regional data controls. Include the timestamp field from each payload as your evidence time anchor.
- Observability: Tag logs and traces with endpoint, port/corridor, disruption id, and policy id. Build dashboards that show trigger counts, false-positive retractions, and average dispute resolution time.
These practices convert an API integration into a trustworthy operation. They also give your legal and finance teams confidence that outcomes are repeatable and explainable.
Error Handling and Troubleshooting
FreightPulse uses explicit error codes with a consistent JSON envelope. Build a small helper to map codes to actions.
- 401 Invalid or missing X-API-Key: Validate headers at boot and in health checks. In pipelines, raise a pager if this appears; it indicates misconfiguration.
- 403 No active subscription: Surface a clear UI error to operators and halt trigger evaluation; do not silently degrade, because evidence freshness matters.
- 422 Missing required parameter: Display actionable guidance (e.g., “/carriers requires q”). Keep a static param schema near your client to pre-validate.
- 429 Quota or per-minute rate exceeded: Queue non-urgent jobs and retry after a backoff window. Avoid aggressive loops that compound throttling.
Example error response:
{
"success": false,
"error": "Missing required parameter: q"
}
Your client should always branch on success first, then inspect data or error. Persist error payloads with the corresponding request parameters to expedite root cause analysis.
Real-World Use Cases
- Parametric delay payout at US West Coast ports: A forwarder defines a trigger that activates when Disruptions returns any cyclone or severe_weather within 300 km of USLAX and Port Congestion shows ratio_vs_baseline < 0.9 during the shipment’s ETA window. The payout is scaled by diesel national average vs its 90‑day average to reflect contemporary operating costs. Endpoints: /disruptions, /port-congestion, /fuel-prices, /historical.
- Market analyst congestion index: An insights team publishes a weekly note ranking congestion across 20 ports. They use /port-congestion to collect “as_of” values and ratio_vs_baseline, and /historical to chart 90‑day trends. Annotations link to nearby Disruptions events as explanatory notes, reducing subjective commentary with factual context. Endpoints: /port-congestion, /historical, /disruptions.
- Carrier-aware claims triage: A 3PL’s claims desk ingests a new delay event. The system looks up the assigned motor carrier using /carriers and attaches status and safety_rating to the claim record. If the carrier is not active, the claim is routed for additional review before payout. Endpoints: /carriers, optionally /disruptions and /port-congestion to complete evidence packets.
End-to-End Example: Combining Events, Congestion, and Pricing
Below is a Python sketch that pulls together an evaluative path: detect disruptions around a port, confirm congestion threshold, then compute a payout scale using diesel baselines and—optionally—inject a contemporaneous US FTL linehaul benchmark for settlement calibration.
import requests
from statistics import mean
BASE = "https://freightpulsehq.com/api/v1"
HEADERS = {"X-API-Key": "YOUR_API_KEY"}
def fp_get(path, params=None):
r = requests.get(f"{BASE}{path}", headers=HEADERS, params=params, timeout=20)
r.raise_for_status()
payload = r.json()
if not payload.get("success"):
raise RuntimeError(payload.get("error", "Unknown FreightPulse error"))
return payload["data"]
def disruption_near_port(port):
return fp_get("/disruptions", {"port": port})
def port_congestion(port):
data = fp_get("/port-congestion", {"port": port})
return (data.get("results") or [None])[0]
def diesel_baseline(period="90d"):
hist = fp_get("/historical", {"metric": "fuel_price_diesel_national", "period": period})
vals = [p["value"] for p in hist.get("series", [])]
return mean(vals) if vals else None
def latest_fuel():
data = fp_get("/fuel-prices", {})
return data["data"]["diesel"]["national_average"]
def trucking_quote(origin_zip, dest_zip):
return fp_get("/freight-rates", {"mode": "trucking", "origin_zip": origin_zip, "destination_zip": dest_zip})
def evaluate_payout(port, lane):
dis = disruption_near_port(port)
if not dis.get("results"):
return {"triggered": False, "reason": "No disruptions"}
pc = port_congestion(port)
if not pc:
return {"triggered": False, "reason": "No congestion reading"}
ratio = pc["metrics"]["ratio_vs_baseline"]
if ratio >= 0.9:
return {"triggered": False, "reason": f"Ratio {ratio} not below 0.9"}
# Baseline and scale factor from diesel
baseline = diesel_baseline()
current = latest_fuel()
if not baseline or not current:
return {"triggered": False, "reason": "Fuel data unavailable"}
fuel_uplift = max(0.0, (current - baseline) / baseline) # e.g., 12% above baseline
# Optional: lane cost context
quote = trucking_quote(lane["origin_zip"], lane["destination_zip"])
base_cost = quote.get("price_usd")
scale = 1.0 + 0.5 * fuel_uplift # custom factor
return {
"triggered": True,
"scale_factor": round(scale, 4),
"evidence": {
"disruptions": dis["results"],
"port_congestion": pc,
"diesel_current": current,
"diesel_baseline_90d": baseline,
"ftl_quote_usd": base_cost
}
}
result = evaluate_payout("USLAX", {"origin_zip": "10001", "destination_zip": "90210"})
print(result)
This snippet adopts sane practices:
- Uses consistent success validation before accessing fields.
- Makes the fuel-based scale deterministic and simple to explain.
- Returns a self-contained evidence object you can attach to the claim.
Complete JSON Examples: Evidence Packets You Can Save
When a trigger fires, persist a packet like this to your claims datastore. This format keeps raw responses intact and adds your computed values for downstream reporting.
{
"trigger_id": "trig-2026-08-24-0001",
"shipment_id": "SH123456789",
"policy_id": "POLICY-AX-2026-01",
"verdict": "triggered",
"computed": {
"port_ratio_threshold": 0.9,
"observed_ratio": 0.85,
"diesel_current": 3.847,
"diesel_baseline_90d": 3.75,
"fuel_uplift": 0.0259,
"scale_factor": 1.0129
},
"evidence": {
"disruptions": {
"success": true,
"data": {
"results": [
{
"id": "gdacs:TC:1001305",
"type": "cyclone",
"severity": "moderate",
"title": "Tropical Cyclone SAUDEL-26",
"country": "Japan",
"starts_at": "2026-08-18T12:00:00+00:00",
"source": "GDACS"
}
]
}
},
"port_congestion": {
"success": true,
"data": {
"results": [
{
"port": "Los Angeles-Long Beach",
"locode": "US LAX",
"country": "United States",
"congestion": "moderate",
"as_of": "2026-08-14",
"metrics": {
"recent_avg_portcalls_per_day": 8.7,
"baseline_avg_portcalls_per_day": 10.2,
"ratio_vs_baseline": 0.85
}
}
]
}
},
"fuel": {
"success": true,
"data": {
"timestamp": "2026-07-30T12:00:00Z",
"source": "EIA (U.S. Energy Information Administration)",
"currency": "USD",
"unit": "gallon",
"data": {
"diesel": {
"national_average": 3.847,
"historical": {
"90d_avg": 3.75
}
}
}
}
}
}
}
Note how the packet preserves the original envelopes. That makes it easy to reproduce the trigger decision at any point in the future and to show both structured and human-readable evidence to stakeholders.
Security and Data Stewardship for Claims-Grade Systems
- Separation of concerns: Isolate the component that calls external APIs from the component that computes payouts. Pass only the normalized evidence to the payout engine. This reduces the surface area for data drift and introduces clearer observability boundaries.
- Immutable evidence store: Persist raw JSON responses in write-once buckets with retention policies aligned to your claims horizon. Store cryptographic hashes of each file in your claims database to ensure integrity.
- Role-based access: Developers and QA can access sandbox evidence; claims adjusters have read-only access to production evidence; auditors get time-bound access via expiring links. Attach explicit scopes to each consumer service key in your secret store.
- Data lifecycle: Retire old baseline series after your statute of limitations expires, but keep minimal metadata (trigger id, decision, hash) for trend analytics and model improvement.
Operational Patterns: Performance and Latency Considerations
- Regional routing: Co-locate your polling workers with your primary user base to keep p95 latencies low. Group ports by geography and schedule batch fetches to reduce cold-start penalties.
- Provider overrides and fallback chains: If you maintain alternative evidence sources (e.g., internal telemetry), design a resolver that uses FreightPulse by default but can fall back to your cache if health checks fail. Clearly label “cached” vs “fresh” in the evidence packet so downstream systems can reflect confidence.
- Streaming and batching: While these endpoints return bounded JSON payloads, you can still reduce chattiness by batching port queries and caching static lookups (e.g., carrier identity) for 24 hours. For near-real-time front-ends, broadcast incremental updates via websockets when a new disruption id appears in your queue.
- Latency targets: Set SLOs for each step (disruption poll, congestion fetch, baseline compute) and alert if an end-to-end evaluation exceeds your target (e.g., 2 seconds). Claims desks appreciate fast verdicts when customers are on the line.
Core Endpoints: Additional Examples and Field Explanations
Port Congestion: Filtering by severity label
You can filter by congestion labels to generate concise dashboards or to throttle evaluations when nothing is elevated.
curl -s \
-H "X-API-Key: YOUR_API_KEY" \
"https://freightpulsehq.com/api/v1/port-congestion?region=North%20America&congestion=high"
Interpretation: Show only entries where congestion is high. Use as_of to align to your report date; remember the ~6–7 day lag.
Disruptions: Scoping to event type
Filter by type when your policy language only references certain hazards.
curl -s \
-H "X-API-Key: YOUR_API_KEY" \
"https://freightpulsehq.com/api/v1/disruptions?type=severe_weather&country=United%20States"
Interpretation: Use results[].starts_at and your shipment’s schedule to ensure temporal overlap before triggering.
Freight Rates: Ocean or air into US ZIPs
Limited ocean/air quoting from Asian origins can provide intermodal pressure signals for pricing context.
curl -s \
-H "X-API-Key: YOUR_API_KEY" \
"https://freightpulsehq.com/api/v1/freight-rates?mode=ocean&origin_country=CN&dest_zip=90001&container_size=40HC"
Interpretation: When ocean quotes jump, use a step-up function in your payout schedule even if the trigger arose from a natural disruption upstream.
FAQ
How often do FreightPulse fuel prices update?
Fuel price data reflects EIA updates and includes timestamped national and regional values plus historical averages. Use the timestamp field in each response as the authoritative time anchor for your surcharge and payout calculations.
Can I look up ocean carriers as well as trucking carriers?
Yes. The /carriers endpoint supports US trucking (FMCSA SAFER) and ocean NVOCC/OTI (FMC directory) lookups via the type parameter. Air returns available:false so you can route those verifications through a different workflow.
Does the port congestion data reflect real-time vessel wait times?
No. Port congestion is an approximation from IMF PortWatch AIS data, reported as a 7‑day average versus a 90‑day baseline and typically lags by about 6–7 days. This design provides a stable reference for parametric clauses without implying minute-by-minute tracking.
What’s the best way to avoid duplicate triggers from the same disruption?
Deduplicate by the disruption id and enforce a suppression window in your queue. Store seen ids with timestamps and only re-enqueue when severity escalates or when you intentionally re-evaluate after a policy-defined cool-down.
How should I document evidence for a disputed claim?
Persist the full JSON envelopes from all endpoints used—/disruptions, /port-congestion, /fuel-prices, /freight-rates, and /historical—along with your computed thresholds and verdict. Include as_of, starts_at, and timestamp fields prominently in the report so reviewers can trace data lineage quickly.
Conclusion + CTA
Parametric cargo insurance works when triggers are objective, explainable, and available in the same place your developers work. FreightPulse gives you a unified event surface—natural disruptions, port congestion approximations, US FTL quotes, fuel prices, and carrier verifications—behind one consistent API. That means fewer integration surprises, faster time to production, and claims decisions you can defend.
Whether you’re a freight forwarder aiming to shorten dispute cycles, a 3PL reducing overhead on claims adjudication, or an analyst publishing congestion indices, the combination of Disruptions, Port Congestion, Historical baselines, and pricing context is enough to ship a parametric MVP this week—not next quarter. Build with evidence packets, standardize your rules, and let your operators focus on exceptions, not data hunting.
Start exploring the endpoints and wire your first trigger today at FreightPulse. If you prefer to dive straight into coding, open a terminal, run a cURL against the base URL, and iterate from there. Try FreightPulse for free and turn your cargo programs into event-driven systems your customers can trust.