Global supply chains run on brittle edges. A single port labor disruption can cascade into weeks of missed ETAs, container rollover fees, truck no-shows, and blown sales forecasts. The technical challenge is not predicting the future — it’s detecting reliable leading indicators, fusing them with your own shipment graph, and triggering the right playbooks fast enough to matter. Historically, doing this meant wiring five different feeds (fuel, freight quotes, AIS-based congestion, carrier directories, and hazard alerts) plus writing brittle normalization code that often failed right when you needed it.
This post shows how to use FreightPulse to detect and mitigate port labor disruption risk before it breaks your network. We will map the core data signals — port congestion trends, nearby natural hazards, live US FTL quotes, carrier directory checks, and fuel baselines — into reproducible playbooks your teams can run during labor negotiations, slowdowns, or outright strikes. We’ll walk through concrete API calls, complete JSON responses, and implementation patterns for developers, freight forwarders, 3PLs, supply chain SaaS platforms, and enterprise logistics teams.
By the end, you’ll have a practical blueprint to build a “Port Labor Risk Console” that combines signal detection, automated lane re-quotes, carrier sanity checks, and dashboards your ops leaders can trust. We will use a single API — FreightPulse — so you avoid stitching together EIA, FMCSA, and AIS-derived feeds yourself. Let’s get to work.
Why FreightPulse
FreightPulse consolidates real-time logistics intelligence behind one REST API — fuel prices, live US full-truckload (FTL) quotes, IMF PortWatch congestion approximations, FMCSA/FMC carrier directories, and natural-disruption alerts. For port labor disruption response, that consolidation is the difference between “we think something’s wrong” and “we can reroute by 3 p.m. with cost deltas and vetted carriers.”
- Single integration, coherent schema: Instead of ingesting and normalizing EIA, FMCSA, NOAA/NWS, USGS, GDACS, and a freight quote provider separately, FreightPulse returns consistent JSON envelopes for every endpoint. Your ingestion, retries, logging, and alerting pipelines can be one code path. That’s especially valuable during incident response, when heterogenous payloads and mapping bugs create blind spots.
- Actionable pairing of signals and controls: You can pair a congestion uptick at “US LAX” with disruption alerts within a 300 km radius, then immediately request alternative drayage or long-haul FTL quote estimates for diversion lanes — all in the same workflow. The live trucking quotes let you quantify the cost of shifting gate-out to a different US port or repositioning containers inland.
- Operator-grade context, not raw telemetry: Port congestion is delivered as a 7-day average versus a 90-day baseline (data lag ~6–7 days), removing noisy day-to-day AIS variance. Disruption alerts come from authoritative hazard sources and can be filtered by port radius, so ops teams get concise context for decision-making without combing maps or raw ship tracks.
- Developer ergonomics: All endpoints share a uniform success/data envelope and coherent field names; parameters are minimal and human-readable (e.g., port=USLAX, q for carrier search). This shortens your time-to-first-dashboard and reduces maintenance risk in production.
Quick Start
Base URL:
https://freightpulsehq.com/api/v1
First request: retrieve current national and regional fuel prices to anchor your surcharge models. This gives you immediate context for transport cost baselines when rerouting around a labor-impacted port.
curl "https://freightpulsehq.com/api/v1/fuel-prices"
Example response (complete):
{
"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’ll use:
- data.diesel.national_average — Use as a baseline in automated FTL re-quote comparisons when diversion adds miles.
- data.diesel.regions.* — Apply region-specific surcharge adjustments for drayage or long-haul legs tied to West Coast versus Gulf Coast diversions.
- data.diesel.historical.* — Visualize momentum (e.g., 30-day average) alongside congestion trendlines to explain cost drivers to finance partners.
Core Endpoints for Disruption Playbooks
1) Port Congestion: GET /port-congestion
Purpose: Identify abnormal slowdowns at target ports to anticipate longer dwell, delayed gate-outs, and downstream trucking schedule risk. FreightPulse approximates congestion using IMF PortWatch (UN Global Platform AIS) as a 7-day average of port calls versus a 90-day baseline, with ~6–7 days of data lag. This is not live vessel wait times; it is a lagged, standardized signal you can trend and threshold for early warnings.
Key parameters:
- port — Port name or LOCODE (e.g., USLAX for Los Angeles-Long Beach)
- country — Country filter (name or ISO3)
- region — Continent filter
- congestion — low | moderate | high (optional filter)
cURL:
curl "https://freightpulsehq.com/api/v1/port-congestion?port=USLAX"
Example response with field explanations:
{
"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
}
}
]
}
}
- congestion — A categorical label you can use directly in dashboards or alert thresholds.
- metrics.ratio_vs_baseline — Primary quantitative signal to chart (values below 1.0 indicate fewer port calls versus baseline; potential slowdown).
- as_of — Data timestamp for transparency; set user expectations that values are lagged by ~6–7 days.
Implementation tips:
- Plot ratio_vs_baseline for your top 10 origin/destination ports. Trigger a “preemptive diversion evaluation” workflow when ratio dips below 0.9 for 3–5 consecutive days in the daily series (see /historical later).
- Pair congestion “moderate/high” with a proximity disruption filter (see /disruptions) to escalate risk when both signals light up.
2) Natural Disruptions Near Ports: GET /disruptions
Purpose: Detect cyclones, earthquakes, and severe weather that could compound labor disputes or stress port ops. Filter directly by port to cut noise. This endpoint consolidates GDACS, USGS, and NOAA/NWS events. It covers natural hazards only — not geopolitical events, strikes, or closures — but when overlaid on congestion trends, it strengthens your confidence to reroute or buffer lead times.
Key parameters:
- port — Port identifier (supports radius filtering: 300 km; 100 km for US weather)
- type — cyclone | earthquake | flood | volcano | drought | wildfire | severe_weather
- severity — low | moderate | high
- country — Filter by country
cURL:
curl "https://freightpulsehq.com/api/v1/disruptions?port=USLAX&severity=high"
Example 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"
}
]
}
}
- type — Use to route alerts to the right response team (e.g., weather desk vs. seismic contingency).
- severity — Map to escalation runbooks; for “high” near a target port, evaluate gate closures and terminal advisories.
- starts_at — Aligns with your shipment ETAs to quantify overlap risk windows.
Implementation tips:
- For US ports, combine port=USXYZ with severity=high and type=severe_weather to surface NOAA/NWS alerts within 100 km.
- Join disruptions to shipment legs by nearest seaport geofence and time window overlap to prioritize exceptions.
3) Live FTL Re-Quotes for Diversion Scenarios: GET /freight-rates
Purpose: Quantify the cost and transit time impact of rerouting ocean imports via alternative US gateways (e.g., switch from Los Angeles to Oakland or to an intermodal ramp), then trucking inland with FTL. During a labor slowdown, your team needs “Plan B” quotes in seconds, not days.
Key parameters (trucking mode shown):
- mode — trucking (default), ocean, or air
- origin_zip, destination_zip — Required for trucking
- pickup_date, qty, total_weight_lb — Optional for more accurate quotes
- container_size — Ocean-only when mode=ocean
cURL:
curl "https://freightpulsehq.com/api/v1/freight-rates?mode=trucking&origin_zip=90001&destination_zip=84104&pickup_date=2026-08-24&qty=1&total_weight_lb=38000"
Example 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"
}
}
- price_usd — Feed this into your diversion cost calculator. Compare across alternate ports and zips to rank reroute options.
- transit_days — Helps determine whether diversion preserves the customer’s required delivery window.
- pickup_date/delivery_date — Useful in exception timelines and customer-facing communication.
Implementation tips:
- Use multiple candidate origin zips (e.g., drayage hubs near Long Beach, Oakland, Seattle-Tacoma) to find the best inland trucking rate to your DC/consignee.
- If required params are missing, the endpoint returns available:false semantics with HTTP 200. Validate inputs early in UI and pipeline code to avoid null decision paths.
4) Carrier Directory and Safety Sanity Checks: GET /carriers
Purpose: When labor disruptions force you into new geographies, you’ll often add unfamiliar motor carriers or confirm NVOCC status with an ocean intermediary. This endpoint lets you verify US trucking carriers from FMCSA SAFER and query ocean carriers from the FMC directory. Air returns available:false.
Key parameters:
- q — Required search term (DOT number or name)
- type — trucking (default) | ocean | air
cURL (trucking by DOT number):
curl "https://freightpulsehq.com/api/v1/carriers?q=54283"
Example 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"
}
}
]
}
}
- status — Ensure carrier is active before tendering loads during contingency operations.
- safety_rating — Combine with internal risk scoring to gate who can haul time-sensitive diversion freight.
- drivers — Rough proxy for scale and surge capacity.
Implementation tips:
- Add a pre-tender hook in your TMS that queries /carriers; block or flag bookings for carriers not “active” or missing a satisfactory safety rating threshold per your policy.
- When using ocean intermediaries during reroutes, switch type=ocean and validate OTI/NVOCC registration before issuing a booking.
5) Fuel Baselines and Historical Trends: GET /fuel-prices and GET /historical
Purpose: Disruptions and reroutes can add miles and waiting time; your finance and procurement teams will ask “what’s the fuel-driven uplift?” Use /fuel-prices for today’s baseline and /historical for trend charts — or to back-test whether a planned surcharge aligns with market movement.
cURL (historical diesel national series):
curl "https://freightpulsehq.com/api/v1/historical?metric=fuel_price_diesel_national&period=90d"
Example response:
{
"success": true,
"data": {
"metric": "fuel_price_diesel_national",
"period": "90d",
"series": [
{
"date": "2026-07-27",
"value": 5.257
},
{
"date": "2026-08-03",
"value": 5.343"
}
]
}
}
- series[].value — Plot as a line chart to show diesel momentum; correlate with your lane cost deltas for transparency in post-mortems.
- period — Choose 30d/90d/1y to match your stakeholder reporting cadence.
Implementation tips:
- Store weekly series for internal ML forecasts of surcharge windows; align model retrains with weekly EIA cadence.
- Display the 30-day average next to live re-quotes so buyers understand whether the quote reflects a structural change or a transient blip.
Building a Port Labor Risk Console with FreightPulse
This section ties the endpoints together into a practical stack for detection, decisioning, and action — the core of any labor disruption response.
Signal Layer: Trended Congestion + Proximity Hazards
Start with a watchlist of global ports relevant to your network (origin and destination). For each:
- Pull daily congestion series via /historical with metric=port_congestion:<portid> for the curated set of major ports (e.g., Los Angeles-Long Beach, Shanghai, Singapore, Rotterdam). Compute a 7-day moving average of ratio_vs_baseline (already a 7-day average in the source methodology; your local smoothing reduces visualization noise across days if you fetch a daily series).
- Fetch /disruptions filtered by port when labor talks begin or when your terminal partners flag staffing gaps. Focus on severe_weather and cyclone during storm seasons; earthquake for Pacific Rim ports.
- Create composite risk = f(congestion_ratio, recent_change, proximity_alerts_count, alert_severity_weighting). Escalate when risk crosses a threshold or increases X% day-over-day.
Decision Layer: Diversion Options with Cost/Time Impact
- For impacted inbound ocean flows, enumerate diversion candidates (e.g., US West Coast ports or inland ramps). Map each candidate’s nearest relevant drayage zip and your inland destination zip(s).
- Call /freight-rates for the candidate lane(s) to get price_usd and transit_days. Store the top 3 options per shipment or SKU flow.
- Load today’s fuel baseline with /fuel-prices and tag the option set with expected surcharge sensitivity (e.g., West Coast legs vs. Gulf Coast).
Action Layer: Carrier Vetting and Exception Messaging
- When brokers propose alternates, query /carriers to validate DOT status and safety. Automatically flag non-active carriers or those with unacceptable safety ratings.
- Push an exception summary to ops: “Port US LAX congestion moderate (0.85 vs baseline). 1 severe weather alert within 300 km. Candidate diversion: US OAK + FTL to 84104 at $7,208, 4 days. Carrier SWIFT active (S). Fuel baseline diesel $3.847/gal.”
- Log all above in your incident timeline for auditability.
End-to-End Examples: cURL, JavaScript, and Python
Example 1: cURL Workflow — LAX Watch, Disruption Check, and Inland Quote
# 1) Port congestion snapshot for USLAX
curl "https://freightpulsehq.com/api/v1/port-congestion?port=USLAX"
# 2) Natural hazards within port radius (escalate if severity high)
curl "https://freightpulsehq.com/api/v1/disruptions?port=USLAX&severity=high"
# 3) Candidate diversion trucking quote: Los Angeles CA to Salt Lake City UT
curl "https://freightpulsehq.com/api/v1/freight-rates?mode=trucking&origin_zip=90001&destination_zip=84104&pickup_date=2026-08-24&qty=1&total_weight_lb=38000"
# 4) Fuel baseline for context
curl "https://freightpulsehq.com/api/v1/fuel-prices"
Example 2: JavaScript — Assemble a Diversion Recommendation
async function getJson(url) {
const res = await fetch(url, { method: "GET" });
if (!res.ok) throw new Error("Request failed: " + res.status);
return res.json();
}
async function buildDiversionPlan() {
const base = "https://freightpulsehq.com/api/v1";
const [cong, hazard, rate, fuel] = await Promise.all([
getJson(`${base}/port-congestion?port=USLAX`),
getJson(`${base}/disruptions?port=USLAX&severity=high`),
getJson(`${base}/freight-rates?mode=trucking&origin_zip=90001&destination_zip=84104&pickup_date=2026-08-24&qty=1&total_weight_lb=38000`),
getJson(`${base}/fuel-prices`)
]);
const congestion = cong.data.results?.[0];
const hazards = hazard.data.results || [];
const quote = rate.data;
const diesel = fuel.data.data.diesel.national_average;
return {
congestionSummary: {
port: congestion.port,
label: congestion.congestion,
ratio: congestion.metrics.ratio_vs_baseline,
asOf: congestion.as_of
},
hazardCount: hazards.length,
truckingOption: {
service: quote.service,
priceUSD: quote.price_usd,
transitDays: quote.transit_days,
pickupDate: quote.pickup_date,
deliveryDate: quote.delivery_date
},
fuelBaseline: diesel
};
}
buildDiversionPlan()
.then(plan => console.log(JSON.stringify(plan, null, 2)))
.catch(err => console.error(err));
Example 3: Python — Carrier Vetting with Guardrails and Backoff
import time
import requests
BASE = "https://freightpulsehq.com/api/v1"
def get_json(url, retries=3, backoff=0.5):
for attempt in range(retries):
r = requests.get(url, timeout=10)
if r.ok:
body = r.json()
if body.get("success") is True:
return body["data"]
else:
raise RuntimeError(f"API error: {body.get('error')}")
time.sleep(backoff * (2 ** attempt))
raise RuntimeError(f"Failed after {retries} attempts")
def vet_carrier(dot_number: str):
data = get_json(f"{BASE}/carriers?q={dot_number}")
results = data.get("results", [])
if not results:
return {"approved": False, "reason": "Carrier not found"}
c = results[0]
status = c.get("status")
safety = c.get("safety_rating")
approved = (status == "active") and (safety in ("S", "Satisfactory", "satisfactory", "S1"))
return {
"approved": approved,
"status": status,
"safety_rating": safety,
"legal_name": c.get("legal_name"),
"drivers": c.get("drivers"),
"address": c.get("address")
}
if __name__ == "__main__":
result = vet_carrier("54283")
print(result)
Historical Series for Trend Detection: GET /historical (Ports)
For early-warning dashboards, plot a port’s daily congestion series to spot inflection points before they become headlines. Use the curated set of major global ports supported by the series endpoint, such as Shanghai, Singapore, Rotterdam, and Los Angeles-Long Beach.
Parameters:
- metric — port_congestion:<portid> (replace <portid> with the platform’s curated identifier for the port)
- period — 30d (default) | 90d | 1y
Example request:
curl "https://freightpulsehq.com/api/v1/historical?metric=port_congestion:USLAX&period=30d"
Illustrative response (shape):
{
"success": true,
"data": {
"metric": "port_congestion:USLAX",
"period": "30d",
"series": [
{ "date": "2026-07-18", "value": 0.93 },
{ "date": "2026-07-19", "value": 0.92 },
{ "date": "2026-07-20", "value": 0.90 }
]
}
}
- series[].value — Ratio of recent average portcalls vs. 90-day baseline. Values below 1.0 indicate below-baseline activity.
- Use a rolling derivative (today minus 3-day average) to detect accelerating slowdowns; trigger proactive playbooks when delta < -0.05 week-over-week.
Error Handling, Health, and Observability Patterns
Robust incident tooling needs graceful error handling, retries with backoff, and traceable logs. FreightPulse responses use a consistent shape: {"success": true/false, "data": {...}, "error": "..."} and HTTP status codes that signal common issues. While designing clients, treat both HTTP status and the JSON envelope as first-class signals.
- HTTP 422 — Missing required parameters (e.g., q on /carriers). Surface a helpful UI error and link to the input field. Validate required params client-side to prevent noisy retries.
- HTTP 401/403 — Treat as a configuration or environment issue; alert an owning SRE channel with context (endpoint, environment, correlation ID).
- HTTP 429 — Implement exponential backoff and queueing; tag logs with the endpoint and request context so you can batch or defer non-urgent refreshes.
Example error response:
{
"success": false,
"error": "Missing required parameter: q"
}
Best practices:
- Centralize your fetch layer so you can uniformly implement retries, circuit breakers, and structured JSON logging for success=false conditions.
- Cache slow-changing datasets (fuel-price weekly series, 30/90-day congestion trendlines) to minimize repeated fetches and reduce dashboard P95 latency.
- Create synthetic health checks for your incident console (e.g., a low-volume ping to /fuel-prices and a static /historical metric) and wire alerts to detect integration regressions during quiet periods — not just when a real incident hits.
Real-World Use Cases You Can Ship This Quarter
1) Port Labor Watch Dashboard for a Freight Forwarder
Blend /port-congestion (snapshot) and /historical (port series) to visualize trendlines for your top 12 ports. Add /disruptions filtered by each port to annotate the chart with nearby hazards. Show a “Risk Now” summary that flips to orange or red when ratio_vs_baseline drops below 0.9 and at least one high-severity hazard is present. Provide drill-downs into the last 30 days and annotations for ops notes.
Endpoints: /port-congestion, /historical, /disruptions.
2) Diversion Costing Tool for Enterprise Supply Chain Teams
Given a container’s planned US gateway, simulate alternative ports and inland destinations. Pull /freight-rates (trucking) for each candidate inland route; enrich with /fuel-prices to display a transparent breakdown (linehaul vs. fuel sensitivity). Present three options with price_usd, transit_days, and earliest pickup/delivery dates. Approvers can click “Adopt Plan” to trigger a TMS rebooking.
Endpoints: /freight-rates, /fuel-prices.
3) Carrier Vetting Widget for 3PL Tendering
Embed /carriers into your tendering UI. As operators type a carrier name or DOT, auto-complete and then display status, safety_rating, and drivers. Block tender submission when status != active or safety_rating below policy. Log results to your compliance store and attach them to the shipment’s audit trail.
Endpoints: /carriers.
4) Shipment Exception Monitor with Hazard Overlays
For shipments with ETAs inside the next 7 days, poll /disruptions by port to catch sudden severe_weather alerts. If there’s an overlap with a leg’s time window and a hazard of severity=high within radius, raise a tier-1 exception and propose a reroute with live FTL quotes from /freight-rates.
Endpoints: /disruptions, /freight-rates.
5) Finance-Facing Fuel and Congestion Insight Report
Each Monday, generate a one-pager pulling /fuel-prices and /historical (fuel and port series) to explain last week’s transport cost variance. Correlate diesel momentum against inland trucking quotes to justify surcharge adjustments and highlight whether congestion normalization is underway at key gateways.
Endpoints: /fuel-prices, /historical, optionally /freight-rates for representative lanes.
Complete JSON Examples Across the Stack
To make your integration smoother, here are additional complete responses you can use in testing and contract validation.
Fuel Prices (Weekly Snapshot)
{
"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
}
}
}
}
}
Freight Rates (Trucking)
{
"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"
}
}
Port Congestion (Snapshot)
{
"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
}
}
]
}
}
Carriers (FMCSA Trucking)
{
"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"
}
}
]
}
}
Disruptions (Port Radius)
{
"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"
}
]
}
}
Developer Notes: Modeling, Routing, and Performance in Your Client
Because FreightPulse uses a consistent envelope across endpoints, create a typed client (TypeScript/Python) that models success/data/error explicitly. This enables:
- Per-endpoint normalization: Map congestion ratio, hazard severity, and freight rate price into a common “risk and cost” interface for your decision engine.
- Fallback chains: If a non-critical widget (e.g., historical chart) fails, render the snapshot (/port-congestion) with a “last updated” badge while retrying the series call in the background.
- Health and circuit-breaking: Track per-endpoint success rates; if any endpoint shows transient errors, degrade gracefully instead of failing the entire console.
- Observability: Log request URL, response time, success flag, and core identifiers (port code, carrier DOT, zip pairs) for incident timelines.
Performance considerations:
- Batch reads: For dashboards showing multiple ports, parallelize your /port-congestion requests; cache the results for a short TTL and reuse across users.
- Client-side smoothing: Use moving averages on historical series to avoid jittery charts; be explicit that congestion signals are lagged ~6–7 days.
- Regional proximity: For disruption overlays, pre-index your shipments by nearest port to reduce server-side joins at request time.
FAQ
How often do FreightPulse fuel prices update?
Fuel prices are sourced from EIA and exposed with weekly cadence, including national and PADD-region breakdowns plus 30/90-day and YoY statistics. Use the snapshot to anchor surcharge models and the historical series for trend analysis and reporting.
Can I look up ocean carriers as well as trucking carriers?
Yes. Use the /carriers endpoint with type=ocean to query ocean intermediaries via the FMC directory. For US trucking carriers, omit type or set type=trucking to retrieve FMCSA SAFER details like DOT number, status, safety rating, and driver counts.
Does the port congestion data reflect real-time vessel wait times?
No. Port congestion is a lagged approximation derived from IMF PortWatch (AIS): a 7-day average of port calls versus a 90-day baseline, with a typical data lag of about 6–7 days. It’s ideal for trend detection and early warnings, not for minute-by-minute queue lengths.
Can I filter natural-disruption alerts to just those near a specific port?
Yes. The /disruptions endpoint supports port-based filtering (300 km radius; 100 km for US weather). Combine this with severity and type filters (e.g., severe_weather) to create highly targeted alerting that reduces noise during incidents.
What happens if I forget a required parameter like q on /carriers?
You’ll receive a structured JSON error with success=false and a human-readable error message. Validate inputs client-side and handle errors gracefully by prompting users to correct the missing field, rather than retrying blindly.
Conclusion and Call to Action
Port labor disruption risk isn’t a single data problem — it’s a coordination problem. The fastest path to resilient response is to unify detection signals (lagged congestion trends and proximity hazards), decision-enabling data (live FTL costs and transit times), and operational controls (carrier verification) into one workflow your teams can run on demand. That’s exactly what FreightPulse delivers: an opinionated, developer-friendly API surface that gets you from zero to a production-grade Port Labor Risk Console without stitching together five separate feeds or reverse-engineering their schemas.
Whether you’re a developer building incident dashboards, a freight forwarder guiding customers through diversion decisions, or an enterprise supply chain team under the gun to keep OTIF metrics intact, the building blocks are here: /port-congestion and /historical for trend detection; /disruptions for hazard proximity; /freight-rates for immediate re-quote calculations; /carriers for compliance guardrails; and /fuel-prices for transparent cost baselines. One integration, one schema, all the levers your incident playbooks need.
Start implementing today and give your operations leaders the visibility and decisiveness they deserve. Explore the endpoints, run the cURL commands, and wire your first dashboard with FreightPulse. Ready to build? Try FreightPulse for free and ship your Port Labor Risk Console this week.