Supply chain visibility is no longer just about tracking a truck on a map. Shippers and platforms need to blend satellite AIS-derived port activity, live truck events, fuel indices, carrier compliance, and natural-disruption intelligence into one reliable operational picture. Doing this from scratch—stitching EIA for fuel, FMCSA/FMC for carriers, Warp for FTL quotes, PortWatch-derived AIS for port congestion, and multiple hazard sources—creates an integration tax that slows teams down and makes every outage your problem. The result is siloed dashboards, brittle ETL, and delayed response to what matters most: keeping shipments moving.
In this post, we’ll build a unified multimodal visibility layer that combines satellite AIS-proxied port congestion, port-specific disruption risk, FTL truck quotes, and carrier verification using a single, developer-friendly surface: FreightPulse. Whether you’re a supply chain SaaS vendor, a 3PL building a control tower, or an enterprise team seeking better ETA governance, this post shows how to wire practical endpoints into your product with production-grade patterns—retries, health checks, field interpretation, and latency-aware routing strategies—so you can go from zero to meaningful visibility in days, not quarters.
We’ll be opinionated and hands-on: you’ll see actionable cURL, JavaScript, and Python examples; complete JSON payloads; and concrete design notes explaining how to interpret each field for analytics and operations. We will also be explicit where the data is lagged (e.g., port congestion derived from IMF PortWatch’s AIS aggregation has a ~6–7 day lag) versus live (e.g., FTL trucking quotes). The goal is to arm you with a realistic blueprint for a multimodal visibility layer you can ship today.
Why FreightPulse
FreightPulse consolidates the core datasets that most modern logistics products need—fuel prices, live FTL quotes, port congestion, carrier verification, and natural-disruption alerts—behind one REST interface. That means one schema, one set of error semantics, one observability strategy, and far less glue code. Here are the differentiators that matter for developers and operators:
- One surface for cross-modal context: Blend live US FTL quotes from the same API that also serves EIA fuel prices and IMF PortWatch-derived port congestion. When your TMS computes a fuel surcharge or your ETA engine models port delays, you aren’t juggling disparate payload shapes, authentication headers, and error responses. You standardize on a single success/error envelope and move on.
- Practical port intelligence without an AIS contract: Port congestion is proxied from IMF PortWatch’s AIS aggregations and presented as a 7-day average versus a 90-day baseline, with a six-to-seven-day lag. That’s sufficient for planners, network analytics, and market monitors who don’t need minute-by-minute berth activity—but do need consistent, comparable signals across major global ports for trend analysis and decisioning.
- Compliance and risk in the same request flow: Verify US trucking carriers via FMCSA (SAFER) and NVOCC/OTI ocean carriers from FMC directories using a single endpoint. Pair the verification step with disruption alerts (cyclone, earthquake, severe weather) filtered by proximity to a port to gate dispatch or reprioritize bookings.
- Developer ergonomics by design: Consistent JSON envelopes across endpoints, clear error messaging, predictable parameter names, and straightforward field semantics mean less adapter logic in your codebase. FreightPulse intentionally mirrors the mental model of how supply chain teams reason about shipments—cost, time, risk—so product teams can get to customer value faster.
By standardizing on FreightPulse, you avoid writing a fragile patchwork of integrations and get a coherent, unified visibility layer ready for production governance—retries/backoff, health checks, and circuit breakers—deployed once across all your logistics data sources rather than five times.
Quick Start
Base URL:
https://freightpulsehq.com/api/v1
Authentication is via an HTTP header (X-API-Key). Below is the smallest possible “hello world” to fetch national fuel prices. This gives you an immediately useful, production-safe payload—timestamped indices and regional breakdowns you can drop into a UI or surcharge calculator.
curl -s -H "X-API-Key: YOUR_API_KEY" \
"https://freightpulsehq.com/api/v1/fuel-prices"
Example 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 to know:
- data.diesel.national_average: Latest national diesel price, ideal for quick fuel-surcharge calculations.
- data.diesel.change_week / change_percent: Week-over-week movement, useful for market commentary and pricing emails.
- data.diesel.regions: PADD-style regional rollups; use to localize surcharges and analytics.
- data.diesel.historical: Macro trend markers to contextualize current indices within the recent quarter and year.
Core Endpoints You’ll Use to Build a Unified Multimodal Layer
Below we’ll focus on endpoints that let you build a practical, multimodal visibility layer: real-time US FTL quotes, port congestion derived from AIS via IMF PortWatch, disruption alerts near ports, carrier verification (trucking and ocean), and historical series for charting. Each example includes request parameters, a cURL example, and a realistic JSON response with guidance on how to interpret it in your UI or planner workflow.
1) Live US FTL Quotes: GET /freight-rates
Purpose: Get live pricing and lead-time estimates for US full-truckload shipments, with support for some ocean/air flows into the US. Embed this in a booking flow (rate shopping), a capacity planning widget, or an automated quoting system in your TMS.
Key params:
- mode: trucking (default) | ocean | air
- origin_zip, destination_zip: required for trucking quotes
- pickup_date, qty, total_weight_lb: optional but helpful for better quotes
- container_size (ocean only): e.g., 40HC
curl -s -H "X-API-Key: YOUR_API_KEY" \
"https://freightpulsehq.com/api/v1/freight-rates?mode=trucking&origin_zip=10001&destination_zip=90210&pickup_date=2026-08-24&total_weight_lb=36000"
{
"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: Use directly in a quote card or as input to your cost-optimization engine.
- transit_days, delivery_date: Feed ETA calculations; combine with disruption risk and weekend/holiday calendars.
- source: Transparency for your ops team to understand the origin of the quote.
Notes:
- If required parameters are missing, the endpoint returns HTTP 200 with an “available: false” pattern—use this to keep your UI graceful under partial input states.
- Pair with GET /fuel-prices to surface a blended “all-in” cost model or surcharge breakdown.
2) Port Congestion (AIS-derived): GET /port-congestion
Purpose: Gauge recent port activity relative to a 90-day baseline, proxied from IMF PortWatch’s aggregations of satellite AIS. This is a lagged indicator (~6–7 days), designed for planning, analytics, and early signals—not for minute-by-minute berth operations.
Key params:
- port: name or LOCODE (e.g., USLAX), recommended for precise targeting
- country: name or ISO3, if you want a national view
- region: high-level grouping (e.g., continent)
- congestion: optional filter (low | moderate | high)
curl -s -H "X-API-Key: YOUR_API_KEY" \
"https://freightpulsehq.com/api/v1/port-congestion?port=USLAX"
{
"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: A qualitative bucket you can directly map to UI badges (green/yellow/red).
- recent_avg_portcalls_per_day vs baseline_avg_portcalls_per_day: Use to compute performance deltas and inform ETA padding or allocation shifts.
- ratio_vs_baseline: A normalized metric to compare across ports in a rank-ordered “heatmap” dashboard.
- as_of: Reflects the latest date of the 7-day average; remember the ~6–7 day lag. Communicate this in your UI for operator trust.
3) Disruption Intelligence: GET /disruptions
Purpose: Track natural hazards—cyclones, earthquakes, floods, volcanoes, droughts, wildfires, severe weather—that could impact ocean and inland legs. Filter by proximity to a port to keep alerts relevant to shipments actually at risk.
Key params:
- type: cyclone | earthquake | flood | volcano | drought | wildfire | severe_weather
- severity: low | moderate | high
- country: optional filter for national views
- port: filters events by proximity to a port (300km, and 100km for US weather)
curl -s -H "X-API-Key: YOUR_API_KEY" \
"https://freightpulsehq.com/api/v1/disruptions?port=USLAX&severity=high"
{
"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 identifier you can store and de-duplicate in your alerting system.
- type and severity: Drive notification routing and threshold logic (e.g., “page duty only for high severity”).
- port param semantics: When included in the request, results are scoped to events near a port; ideal for shipment-centric alerting.
4) Carrier Verification: GET /carriers
Purpose: Verify US trucking carriers via FMCSA SAFER and ocean NVOCC/OTI entities via FMC. This helps you programmatically gate tendering, ensure regulatory compliance, and highlight safety considerations.
Key params:
- q: required; DOT number, org number, or name
- type: trucking (default) | ocean | air (air returns available:false)
curl -s -H "X-API-Key: YOUR_API_KEY" \
"https://freightpulsehq.com/api/v1/carriers?q=54283"
{
"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: Use to permit/deny tendering automatically.
- safety_rating: Feed your risk score or require manager approval for low ratings.
- drivers: Proxy for scale/capacity; helpful in procurement analytics.
5) Fuel Prices + Historical: GET /fuel-prices and GET /historical
Purpose: Power surcharge calculations, weekly ops emails, dashboards, and market trend analysis. Combine “latest” indices with historical series to contextualize swings and reduce surprise in customer pricing.
Latest prices:
curl -s -H "X-API-Key: YOUR_API_KEY" \
"https://freightpulsehq.com/api/v1/fuel-prices"
Historical series:
curl -s -H "X-API-Key: YOUR_API_KEY" \
"https://freightpulsehq.com/api/v1/historical?metric=fuel_price_diesel_national&period=90d"
{
"success": true,
"data": {
"metric": "fuel_price_diesel_national",
"period": "90d",
"series": [
{ "date": "2026-06-01", "value": 3.79 },
{ "date": "2026-06-08", "value": 3.82 },
{ "date": "2026-06-15", "value": 3.85 },
{ "date": "2026-06-22", "value": 3.81 },
{ "date": "2026-06-29", "value": 3.83 },
{ "date": "2026-07-06", "value": 3.86 },
{ "date": "2026-07-13", "value": 3.88 },
{ "date": "2026-07-20", "value": 3.84 },
{ "date": "2026-07-27", "value": 3.85 },
{ "date": "2026-08-03", "value": 3.87 }
]
}
}
Field interpretation:
- series[].date, series[].value: Weekly cadence; ideal for line charts and variance analysis (e.g., 4-week rolling average).
- Use with current diesel national_average to display “vs. 4-week average” in quote summaries.
From Satellite AIS to Truck Events: Building a Unified Visibility Layer
A single shipment might touch two oceans and three networks: ocean leg departing Asia, discharge and dwell at a West Coast terminal, transload to a domestic DC, and final-mile trucking. Planners need to understand how a cyclone forming near Japan could ripple into berthing delays in LA/Long Beach a week later and, by extension, how your FTL rates and ETAs into Phoenix or Dallas might be impacted. With FreightPulse, you can model this chain with a consistent API:
- Use /port-congestion to watch lagged but normalized signals of port activity. If ratio_vs_baseline dips below 0.85 for LA/LB, increase ocean-to-truck transload buffers by 24–48 hours in your ETA engine.
- Check /disruptions for active cyclones or severe weather near origin or destination ports; flag high-severity events to capacity planners and trigger alternate routings.
- Pull /freight-rates for live US FTL quotes on pivot lanes you’ve pre-vetted; if your primary LA-LV lane spikes beyond your threshold, dynamically shop a LA-PHX transload hop or book earlier pickup.
- Validate partners with /carriers before tendering; ensure status=active and safety_rating meets your policy.
- Communicate surcharges using /fuel-prices and /historical to inform customers why a price changed beyond your control.
Because each endpoint returns a consistent envelope with “success” and “data,” it becomes straightforward to standardize client-side error handling, retries, and circuit breakers. Your platform benefits from fewer integration seams and better stability.
Complete JSON Walkthrough: Putting It Together
Let’s simulate a control tower widget that, for a given ocean arrival into USLAX and a downstream truckload into 85001 (Phoenix), shows port status, disruption risk, projected FTL quote, and a compliance check. Below are stitched calls (pseudocode style) and payloads you can reuse.
JavaScript (Node) Example
import fetch from "node-fetch";
const BASE = "https://freightpulsehq.com/api/v1";
const headers = { "X-API-Key": process.env.FP_KEY };
async function getPortSignal(locode) {
const url = `${BASE}/port-congestion?port=${encodeURIComponent(locode)}`;
const r = await fetch(url, { headers, timeout: 8000 });
return r.json();
}
async function getDisruptionsNearPort(locode) {
const url = `${BASE}/disruptions?port=${encodeURIComponent(locode)}&severity=high`;
const r = await fetch(url, { headers, timeout: 8000 });
return r.json();
}
async function getFTLQuote(originZip, destZip, pickupDate) {
const url = `${BASE}/freight-rates?mode=trucking&origin_zip=${originZip}&destination_zip=${destZip}&pickup_date=${pickupDate}`;
const r = await fetch(url, { headers, timeout: 8000 });
return r.json();
}
async function verifyCarrier(dot) {
const url = `${BASE}/carriers?q=${dot}`;
const r = await fetch(url, { headers, timeout: 8000 });
return r.json();
}
(async () => {
try {
const [port, hazards, quote, carrier] = await Promise.all([
getPortSignal("USLAX"),
getDisruptionsNearPort("USLAX"),
getFTLQuote("90001", "85001", "2026-08-24"),
verifyCarrier("54283")
]);
console.log(JSON.stringify({ port, hazards, quote, carrier }, null, 2));
} catch (err) {
// Fallback strategy: show cached port metrics and stale quotes
console.error("Control tower aggregation failed:", err.message);
}
})();
Design notes:
- Run these calls in parallel to keep p95 latency low; your UI can then render the first-complete sections (skeleton UIs) as results stream in.
- For added resilience, cache port metrics and FTL quotes by key for a short TTL (e.g., 15–30 minutes) and serve stale-on-error.
- Build retry logic with exponential backoff on transient network errors and timeouts; avoid aggressive retries that overwhelm networks.
Python Example (Requests + Backoff)
import os, time, requests
BASE = "https://freightpulsehq.com/api/v1"
HEADERS = { "X-API-Key": os.environ.get("FP_KEY", "") }
def get_json(path, params=None, retries=3):
for attempt in range(retries):
try:
r = requests.get(f"{BASE}{path}", headers=HEADERS, params=params, timeout=8)
r.raise_for_status()
payload = r.json()
if not payload.get("success", False):
# Return the error shape for caller interpretation
return payload
return payload
except (requests.Timeout, requests.ConnectionError) as e:
if attempt == retries - 1:
raise
time.sleep(0.5 * (2 ** attempt))
# Usage
fuel = get_json("/fuel-prices")
port = get_json("/port-congestion", params={"port": "USLAX"})
hist = get_json("/historical", params={"metric": "port_congestion:USLAX", "period": "30d"})
print(fuel)
print(port)
print(hist)
The function centralizes retry/backoff and returns either a successful payload or the standardized error envelope, simplifying higher-level controller logic.
Error Handling, Health Checks, and Circuit Breakers
All FreightPulse responses share a common envelope:
{
"success": true | false,
"data": { ... }, // present if success=true
"error": "message" // present if success=false
}
HTTP status codes to anticipate:
- 401: Invalid or missing credentials header.
- 403: Subscription inactive state.
- 422: Missing required parameter (e.g., q on /carriers).
- 429: Usage exceeded or burst exceeded. Respect and backoff.
Best practices:
- Implement exponential backoff and jitter on 429 and transient 5xx.
- Prefer short timeouts (6–10 seconds) with retry to reduce tail latency.
- Build a circuit breaker that opens on repeated failures and serves cached data for low-volatility endpoints (fuel, historical, and port congestion).
- Instrument end-to-end latency, error rates, and cache hit rates per endpoint; alert on anomalies (e.g., sudden rise in 422 indicates malformed client requests).
Performance and Observability Patterns for Multimodal Data
A unified visibility layer only works if it’s reliably fast and explainable. When integrating FreightPulse:
- Regional routing and request coalescing: If your backend is multi-region, coalesce identical in-flight requests per edge to avoid stampedes (e.g., many dashboards requesting /fuel-prices simultaneously).
- Provider overrides and fallback logic: For FTL quotes, implement a fallback to the most recent cached quote when new fetches fail; annotate UI as “cached n minutes ago.”
- Latency targets: Keep 95th percentile under 500–800 ms at your edge by parallelizing calls and caching lagged endpoints (port congestion and historical) aggressively.
- Streaming and partial rendering: Even though the responses are discrete, your front-end can render sections incrementally to keep perceived performance high.
- Governance and auditability: Track which internal app or service called which endpoint and when. Emit structured logs with endpoint, params, success flag, and error code to support audits and post-incident reviews.
These patterns keep your control tower responsive under load while ensuring that an upstream hiccup never collapses the operator experience.
End-to-End Example: Unifying AIS-Derived Port Signals with Truck Quotes and Fuel
Let’s build a practical endpoint on your server that answers, in one shot, “What’s the current operational picture for an LA arrival feeding a Phoenix truck leg?” We’ll combine /port-congestion, /disruptions, /freight-rates, and /fuel-prices and produce a concise JSON ready for your UI.
Aggregation Service (Pseudo-Response)
{
"success": true,
"data": {
"port": {
"locode": "USLAX",
"congestion": "moderate",
"ratio_vs_baseline": 0.85,
"as_of": "2026-08-14"
},
"hazards": [
{
"id": "gdacs:TC:1001305",
"type": "cyclone",
"severity": "moderate",
"title": "Tropical Cyclone SAUDEL-26",
"region_affinity": "NW Pacific",
"starts_at": "2026-08-18T12:00:00+00:00"
}
],
"ftl_quote": {
"lane": "90001 -> 85001",
"price_usd": 7207.92,
"transit_days": 4,
"pickup_date": "2026-08-24",
"delivery_date": "2026-08-28"
},
"fuel": {
"diesel_national": 3.847,
"week_over_week_pct": -0.6
},
"advice": {
"eta_buffer_hours": 24,
"risk_level": "elevated",
"notes": [
"Moderate congestion vs 90-day baseline; add 24h buffer to LA/LB discharge.",
"Cyclone activity observed; monitor forecast updates for trans-Pacific sailings.",
"FTL rate acceptable; reprice if >10% rise or if diesel moves +5% WoW."
]
}
}
}
How to use:
- Drive a compact summary widget with risk color, price, and operational advice derived from data fields.
- Store a time series of ratio_vs_baseline per port to observe structural shifts (e.g., seasonality, disruption aftershocks).
Real-World Use Cases You Can Ship This Quarter
- Fuel-surcharge calculator for TMS: Combine /fuel-prices (diesel national_average and regional values) with lane mileage to compute dynamic surcharges. Persist weekly series from /historical to graph YoY variance and justify surcharge emails to shippers.
- Port-congestion dashboard for a freight forwarder: Use /port-congestion across your top 20 ports, sort by ratio_vs_baseline, badge them by congestion level, and annotate with /disruptions filtered by each port to create a watchlist with clear actionability.
- Carrier vetting tool for a 3PL: Query /carriers with DOT or name to ensure status=active and acceptable safety_rating before tendering. Log lookups for audit trails and trigger workflow tasks when status or ratings change.
- Disruption-aware shipment tracker: When a container is bound for USLAX, poll /disruptions with port=USLAX; if severity=high cyclone appears, automatically pad ocean ETA by 48 hours and show a “risk-adjusted ETA” to customers. Pair with fallback lanes via /freight-rates to pre-stage contingency quotes.
- Market insights and pricing newsletter: Every Monday, pull /fuel-prices and /historical plus /port-congestion snapshots for LA, Rotterdam, and Singapore. Share quick deltas (“LA/LB at 0.85x baseline, diesel -0.6% WoW”) to strengthen customer trust and demonstrate proactive management.
Field-by-Field Reference and Practical Tips
/fuel-prices
- timestamp: ISO8601; use for cache freshness and UI footers (“As of …”).
- currency / unit: USD per gallon; avoid mixing with metric without clear conversion display in UI.
- diesel.national_average: Primary input for surcharge formulas.
- diesel.regions: Useful for PADD or regionalized surcharges; map customer lanes to nearest region.
- diesel.historical: Useful to derive rolling averages if you don’t fetch /historical.
/freight-rates
- Validate inputs early; surface “available: false” states cleanly to users.
- Include pickup_date and realistic total_weight_lb for more accurate quotes.
- Persist quotes with an expiration timestamp if applicable in your business logic.
/port-congestion
- ratio_vs_baseline: Use as the canonical comparison metric across ports in a single chart.
- as_of: Display clearly; educate users that the figure is a lagged indicator (~6–7 days).
- Congestion buckets (low/moderate/high): Tie these to policy rules (e.g., “If high, add 48h buffer”).
/disruptions
- Filter by port to make alerts shipment-relevant; avoid spamming operators with global noise.
- severity: Calibrate notification tiers; keep “high” for paging and “moderate” for email-only.
- Store event ids to deduplicate notifications across polling cycles.
/carriers
- status and safety_rating: Drive automated tender gating; require manager override for risky ratings.
- drivers: Use in capacity planning heuristics within a region.
/historical
- metric: Use fuel_price_diesel_national, fuel_price_gasoline_national, or port_congestion:<portid>.
- period: Choose 30d | 90d | 1y to align with your chart defaults.
Additional End-to-End Examples with Complete JSON
Example: Ocean-to-Truck Handoff Planning (LA to Dallas)
curl -s -H "X-API-Key: YOUR_API_KEY" \
"https://freightpulsehq.com/api/v1/port-congestion?port=USLAX"
{
"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
}
}
]
}
}
curl -s -H "X-API-Key: YOUR_API_KEY" \
"https://freightpulsehq.com/api/v1/disruptions?port=USLAX&severity=moderate"
{
"success": true,
"data": {
"results": [
{
"id": "usgs:EQ:2026-08-13:CA:112233",
"type": "earthquake",
"severity": "moderate",
"title": "M4.9 near Southern California",
"country": "United States",
"starts_at": "2026-08-13T07:22:00+00:00",
"source": "USGS"
}
]
}
}
curl -s -H "X-API-Key: YOUR_API_KEY" \
"https://freightpulsehq.com/api/v1/freight-rates?mode=trucking&origin_zip=90001&destination_zip=75201&pickup_date=2026-08-25"
{
"success": true,
"data": {
"mode": "trucking",
"service": "FTL (53' dry van)",
"source": "Warp",
"price_usd": 3451.10,
"transit_days": 3,
"pickup_date": "2026-08-25",
"delivery_date": "2026-08-28"
}
}
Interpretation: With ratio_vs_baseline at 0.85 (moderate congestion) and a moderate local seismic event, add a 24–48 hour buffer to discharge-transload timing. The Dallas FTL quote and transit_days give you a concrete downstream plan; surface all three insights in one control card.
Example: Carrier Vetting Before Tender
curl -s -H "X-API-Key: YOUR_API_KEY" \
"https://freightpulsehq.com/api/v1/carriers?q=ACME%20TRUCKING&type=trucking"
{
"success": true,
"data": {
"type": "trucking",
"query": "ACME TRUCKING",
"results": [
{
"dot_number": 1234567,
"legal_name": "ACME TRUCKING LLC",
"status": "active",
"safety_rating": "S",
"drivers": 87,
"address": {
"city": "Grapevine",
"state": "TX",
"country": "US"
}
}
]
}
}
Interpretation: status=active and safety_rating=S clears automated tendering. If you have a policy requiring minimum driver count for specific lanes, use drivers to enforce it.
Example: Fuel Market Newsletter
curl -s -H "X-API-Key: YOUR_API_KEY" \
"https://freightpulsehq.com/api/v1/fuel-prices"
curl -s -H "X-API-Key: YOUR_API_KEY" \
"https://freightpulsehq.com/api/v1/historical?metric=fuel_price_diesel_national&period=1y"
Interpretation: Compute WoW and YoY deltas; chart the 4-week and 12-week moving averages; include a one-liner on port signals for LA/LB and Rotterdam from /port-congestion to enrich your commentary.
Developer Implementation Guidance and Best Practices
- Request composition: Where possible, request only what your UI needs for the current route. Resist the temptation to prefetch every endpoint on every page.
- Typed models: Define TypeScript or Python dataclasses mirroring the response shapes for each endpoint. Include optionality for fields that may be absent on “available:false” patterns.
-
Caching heuristics:
- fuel-prices: Refresh every 24 hours or upon meaningful change; short local cache acceptable for dashboards.
- port-congestion: Refresh daily (it’s lagged), aggressively cache; perfect candidate for offline hydration.
- disruptions: Poll more frequently (e.g., every 30–60 minutes) when shipments approach high-risk regions or ports.
- freight-rates: Cache per lane briefly (e.g., 10–30 minutes) to accelerate repeated quote checks in a session.
- Observability: Emit logs with endpoint, params hash, latency, HTTP code, success flag, and error message. Dashboard p95/p99 latencies and 4xx/5xx rates per endpoint.
- Resilience: Use circuit breakers to fail fast to cached data for lagged endpoints; back off on disruptions and quotes if repeated failures occur.
FAQ
How often do FreightPulse fuel prices update?
Fuel prices reflect official EIA data cadence and include timestamped payloads for freshness. Use the timestamp to drive cache invalidation and clearly annotate your UI with “As of …” so operators trust the figures they see.
Can I look up ocean carriers as well as trucking carriers?
Yes. The /carriers endpoint supports type=ocean for FMC NVOCC/OTI directory lookups, and the default type=trucking covers FMCSA SAFER data. Air queries return available:false, so you can handle that gracefully in your UI.
Does the port congestion data reflect real-time vessel wait times?
No. Port congestion in FreightPulse is a lagged approximation derived from IMF PortWatch’s AIS-based aggregations. It represents a 7-day average versus a 90-day baseline with a data lag of roughly 6–7 days—ideal for planning and trend analysis, not live berth operations.
Can I filter natural-disruption alerts to only those that matter for my port?
Yes. Include the port parameter when querying /disruptions to retrieve events within a defined proximity to that port (300km globally and 100km radius for US weather). This keeps alerts relevant to shipments in-flight and reduces noise.
What’s the best way to combine FTL quotes with fuel indices and port signals?
Fetch /freight-rates for lane-level quotes, use /fuel-prices for surcharge context, and pull /port-congestion for port activity normalization. Apply a risk-aware ETA buffer if congestion is moderate/high or if /disruptions flags high-severity events near the relevant port.
Conclusion + CTA
A credible multimodal visibility layer doesn’t have to mean five vendor contracts, five schemas, and five different operational failure modes. By consolidating satellite AIS-proxied port activity, live truck quotes, fuel indices, carrier verification, and natural-disruption intelligence behind one API, your team can move faster, reduce brittle integration code, and deliver clearer operational guidance to customers. You get planning signals where they matter and live quotes where timing is critical—all in one consistent JSON envelope that’s easy to observe and govern.
If you’re building a control tower, a data-driven TMS, or a market analytics product, the path to value is short: start with port congestion and disruptions to orient your ocean leg, layer on FTL quotes for inland routing, and anchor your price narrative with fuel indices. With a handful of endpoints, your product can surface actionable insight across modes without claiming “real-time AIS” where you don’t need it—and without the fragility that comes from stitching together disparate feeds.
Ready to ship a unified multimodal visibility layer? Explore the endpoints and examples above and bring them into your stack today. Visit FreightPulse to learn more, or jump in and Try FreightPulse for free.