Modern shippers and 3PLs don’t lose customers because trucks can’t move—they lose them because silence fills the gaps when plans change. A delayed pickup with no updated ETA, a vessel arriving into a congested port with no explanation, a sudden winter storm rerouting drivers without any narrative: these are the moments that fracture trust. If you operate a supply chain SaaS product or run a customer success team at a 3PL, you need a reliable, defensible way to publish live ETAs and exception narratives that combine multiple data sources in one place—without maintaining five different feeds and brittle parsers.
This post demonstrates how to build real-time, customer-facing ETAs and exception narratives using FreightPulse. You’ll learn how to enrich shipment timelines with diesel price transparency for surcharge explanations, inject live FTL rate/ETA context, watch port congestion trends for scenario planning, verify carriers, and listen for natural-disruption alerts near ports before they become “fire-drill” calls. We’ll work through concrete API calls, explain responses field-by-field, and share best practices for resiliency and observability so your team can go from whiteboard to production quickly.
We’ll also focus on the one requirement your customers demand: clarity. When a shipment is on time, say why you’re confident. When it slips, provide a crisp exception narrative grounded in data—“high winds within 100 km of USLAX” or “7-day portcall average at 85% of baseline”—and automatically adjust SLAs and ETAs across your customer portal or TMS widgets. With FreightPulse, you can pull fuel prices, freight rates, port congestion trends, carrier details, and natural-disruption alerts from a single REST API that normalizes responses into a consistent schema designed for production systems.
Why FreightPulse
There’s a gulf between “we connected a feed” and “we ship to production daily with reliable data customers trust.” FreightPulse closes that gap by consolidating critical logistics intelligence behind one REST interface so you don’t waste engineering cycles stitching together disparate feeds or writing fragile scrapers. Here are four practical reasons teams adopt FreightPulse when they need customer-facing ETAs and exception narratives:
- Single data surface, consistent schema. Instead of wiring EIA (fuel), a freight quote provider, an AIS-derived port tracker, FMCSA/FMC carrier directories, and multiple hazard feeds separately, you query one base URL with uniform success/data/error semantics. Your services share a common response contract for logging, alerting, and analytics. That consistency lowers cognitive load and accelerates development.
- Operational relevance out of the box. Live US FTL quotes (via Warp) return transit-day estimates and delivery windows in the same JSON schema as diesel price series from EIA. Natural-hazard alerts arrive with type/severity/title and can be filtered by port radius to preemptively annotate at-risk shipments. Port congestion is delivered as trend ratios (7-day vs 90-day baselines) for direct charting and scenario narratives—perfect for your “What changed since last week?” card.
- Production-minded resiliency. FreightPulse endpoints are built for predictable integration: stable field names, explicit source metadata, and straightforward error bodies. This keeps your retry policies, circuit breakers, and SLO dashboards simple. You can design uniform fallbacks (e.g., cached values) whenever success=false, maintaining continuity in your customer apps even during transient network issues.
- Developer ergonomics across the stack. The HTTP/JSON model fits seamlessly into modern backends and edge workers. You can easily add observability—log success flags, correlate by port or carrier, and attach disruption IDs to shipments—and implement governance patterns like per-service keys, role isolation, and audit trails in your own systems. The result: faster PR cycles and safer rollouts.
The headline: one normalized API that gives your product the “complete sentence” it needs—price context, ETA windows, carrier verification, congestion trends, and disruption narratives—so your CS team can say exactly what’s happening and why.
Quick Start
FreightPulse is a straightforward HTTP+JSON service with a single base URL:
Base URL: https://freightpulsehq.com/api/v1
All responses share this shape:
{
"success": true,
"data": { ... }
// If success=false:
// "error": "Human-readable message"
}
Make your first request to retrieve national fuel prices (EIA) with historical context:
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
}
}
}
}
}
How to use this data: add a “Fuel Surcharge” explainer to your quote page. Show that surcharges are tied to the EIA national average diesel price, and use change_percent to narrate week-over-week deltas. Present regional context for multi-PADD operations, and use historical bands to temper customer expectations (“diesel is trending 8.2% lower YoY, which we’re passing through in our contractual FSC index”).
Core Endpoints for Real-Time ETAs and Exception Narratives
This section drills into endpoints you’ll stitch together to power ETAs and transparent exception narratives: live FTL freight rates for baseline transit windows, natural-disruption alerts for proactive risk annotations, port-congestion trends for macro context, carrier lookups for verification, and historical series for dashboards. We include cURL, field explanations, and integration tips.
1) Live Freight Rates and Transit Windows: GET /freight-rates
Purpose: Retrieve a live quote and indicative transit window for US FTL lanes (via Warp) and limited ocean/air (Asian origins to US destinations). This supplies the backbone ETA you display to customers immediately at quote or booking time.
Endpoint: /freight-rates
Key params:
- mode: trucking (default), ocean, or air
- origin_zip, destination_zip: required for trucking
- pickup_date: optional; defaults to near-term
- qty, total_weight_lb: optional but useful for context
- container_size: ocean only (e.g., 40GP)
Example cURL:
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"
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"
}
}
Field-by-field:
- mode/service: Present in your UI to set modal context for the ETA.
- price_usd: Render alongside your margin calculator; tie to FSC explanations from /fuel-prices.
- transit_days: Core to your ETA calculation; combine with pickup_date to render delivery_date.
- source: Useful for audit logs and “as-of source” badges in your UI.
Implementation tips:
- Cache quotes for a short window in your application to smooth spikes.
- If an input is incomplete, the endpoint can signal available=false—gracefully prompt the user.
- Store the quoted delivery_date and display it clearly; then subscribe your internal job to watch for disruptions or port-based risks that might change it.
2) Natural-Disruption Alerts (Proactive Risk Narratives): GET /disruptions
Purpose: Feed your exception GPU: cyclones, earthquakes, severe weather, and more—filtered by port radius or country—so you can proactively narrate risk and adjust ETAs or SLAs when warranted. Perfect for “Potential impact near USLAX: moderate cyclone risk” banners.
Endpoint: /disruptions
Key params:
- type: cyclone | earthquake | flood | volcano | drought | wildfire | severe_weather
- severity: low | moderate | high
- country: filter by ISO3 or name
- port: filter by known port (radius-based: 300 km globally; 100 km for US weather)
Example cURL:
curl -s -H "X-API-Key: YOUR_API_KEY" \
"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"
}
]
}
}
Field-by-field:
- id: Stable identifier to attach to shipments and avoid duplicate notifications.
- type/severity: Map to your own risk taxonomy to drive color-coded banners and ETA adjustments.
- title: Plain-language label for your exception narrative (“Cyclone SAUDEL-26”).
- starts_at: Use for timeline visuals (“Risk window begins …”).
- country: Helpful for regional dashboard filters and emails.
- source: Transparency in your audit logs and CS explanations.
Implementation tips:
- Associate a disruption id with affected shipments using port proximity logic. If your shipment references a port (origin/transload/final), query with port=LOCODE to build a watchlist.
- Maintain a rolling cache of active disruptions in your data store and run periodic refreshes.
- Build customer-facing rules: e.g., for severity=high, add +12–24h to ETA and insert a standard narrative, then notify CSMs.
3) Port Congestion Trends (Macro Context, SLA Expectations): GET /port-congestion
Purpose: Provide macro congestion context that influences planning and expectation-setting for ocean legs and drayage. Congestion is approximated from IMF PortWatch AIS data as a 7-day average of portcalls vs a 90-day baseline. Important: this data is lagged ~6–7 days and is not live AIS tracking.
Endpoint: /port-congestion
Key params (at least one required):
- port: name or LOCODE (e.g., USLAX)
- country: name or ISO3
- region: continent
- congestion: optional filter low | moderate | high
Example cURL:
curl -s -H "X-API-Key: YOUR_API_KEY" \
"https://freightpulsehq.com/api/v1/port-congestion?port=USLAX"
Example 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-by-field:
- congestion: low/moderate/high label for simple UI tags.
- as_of: critical to display so customers understand this is lagged, not real-time.
- recent_avg_portcalls_per_day: activity proxy for the last 7 days (lagged).
- baseline_avg_portcalls_per_day: 90-day baseline for comparison.
- ratio_vs_baseline: quick signal for trend cards (e.g., 0.85 = 15% below baseline).
Implementation tips:
- Use this for trend charts and expectation messaging, not minute-by-minute ETAs.
- Display an explicit “last updated” with as_of and a small “methodology” info icon.
- For ocean arrivals, combine this with /disruptions to contextualize delays.
4) Carrier Verification (Trust and Compliance): GET /carriers
Purpose: Let your users (or internal ops) verify US trucking carriers via FMCSA SAFER and look up ocean NVOCC/OTI carriers from the FMC directory—without leaving your app. This reduces risk of tendering to a non-compliant or inactive carrier and adds credibility in customer communications.
Endpoint: /carriers
Key params:
- q: required query (DOT number or name for trucking; org number or name for ocean)
- type: trucking (default) | ocean | air (air returns available:false)
Example cURL:
curl -s -H "X-API-Key: YOUR_API_KEY" \
"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"
}
}
]
}
}
Field-by-field:
- status/safety_rating: High-signal fields to show or notify if the carrier is not in good standing.
- drivers: Useful for capacity/scale heuristics in procurement tools.
- address: Display for verification and paperwork automation.
Implementation tips:
- Attach carrier verification snapshots to each tender at time-of-offer and keep an audit trail.
- Proactively warn operators if a safety rating changes between booking and pickup.
5) Fuel Prices and Historical Series (Transparent Surcharge Story): GET /fuel-prices and GET /historical
Purpose: Anchor your fuel-surcharge logic and trend visualizations with authoritative national averages and region breakdowns. Pair current /fuel-prices with /historical for charts and YoY context. This makes your FSC policy visible and defensible to shippers.
Endpoints: /fuel-prices and /historical
Historical params:
- metric: fuel_price_diesel_national | fuel_price_gasoline_national | port_congestion:<portid>
- period: 30d (default) | 90d | 1y
Historical example cURL:
curl -s -H "X-API-Key: YOUR_API_KEY" \
"https://freightpulsehq.com/api/v1/historical?metric=fuel_price_diesel_national&period=30d"
Example 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-by-field:
- series[].date/value: Feed directly into your charting library and FSC calculators.
- metric/period: Label your charts accurately and tag time-window selectors.
Implementation tips:
- Create a “Fuel effects on your quote” section that references the latest national average and displays a sparkline from the historical series.
- Expose a transparent FSC formula and link back to your methodology doc.
Combining Data for ETAs and Exception Narratives
An ETA on its own is a number; an exception narrative is the story that builds trust. Below we show how to stitch together a baseline ETA from /freight-rates with targeted risk signals from /disruptions and context from /port-congestion, then add cost transparency from /fuel-prices and carrier trust from /carriers.
- Baseline ETA: Use /freight-rates transit_days and delivery_date as the foundation.
- Risk overlay: For any shipment touching a major port or within an affected country/region, query /disruptions by port=LOCODE and add a standard narrative if severity is moderate/high.
- Macro context: If the lane includes ocean legs near curated ports, query /port-congestion (lagged) and display ratio_vs_baseline and congestion label to set expectations.
- Cost transparency: Reference diesel national_average and change_percent to narrate surcharge dynamics that can explain per-mile cost or all-in quotes.
- Trust marker: Embed carrier status/safety_rating next to the booking widget.
Here’s a minimal JavaScript example showing how a backend service might assemble a customer-facing payload for a New York → Beverly Hills FTL move with a risk overlay and fuel context.
// Node.js/TypeScript-style pseudo-implementation
import fetch from "node-fetch";
const BASE = "https://freightpulsehq.com/api/v1";
const headers = { "X-API-Key": "YOUR_API_KEY" };
async function getBaselineQuote() {
const url = `${BASE}/freight-rates?mode=trucking&origin_zip=10001&destination_zip=90210&pickup_date=2026-08-24`;
const r = await fetch(url, { headers });
return r.json();
}
async function getFuel() {
const r = await fetch(`${BASE}/fuel-prices`, { headers });
return r.json();
}
async function getLAConcession() {
const r = await fetch(`${BASE}/port-congestion?port=USLAX`, { headers });
return r.json();
}
async function getUSLAXDisruptions() {
const r = await fetch(`${BASE}/disruptions?port=USLAX&severity=high`, { headers });
return r.json();
}
async function buildCustomerFacingETA() {
const [quote, fuel, cong, dis] = await Promise.all([
getBaselineQuote(), getFuel(), getLAConcession(), getUSLAXDisruptions()
]);
const eta = quote?.data?.delivery_date;
const transit_days = quote?.data?.transit_days;
const diesel = fuel?.data?.data?.diesel?.national_average;
const dieselWoW = fuel?.data?.data?.diesel?.change_percent;
const congestion = cong?.data?.results?.[0];
const congestionNarrative = congestion ?
`Port activity at ${congestion.port} is ${congestion.congestion} (${Math.round(congestion.metrics.ratio_vs_baseline * 100)}% of 90-day baseline, as of ${congestion.as_of}).`
: null;
const disruptions = dis?.data?.results || [];
const severeRisk = disruptions.length > 0;
return {
baseline_eta: eta,
transit_days,
cost_context: {
diesel_usd_per_gallon: diesel,
diesel_week_over_week_change_pct: dieselWoW
},
exception_risks: disruptions.map(d => ({
id: d.id,
type: d.type,
severity: d.severity,
title: d.title,
starts_at: d.starts_at
})),
macro_context: congestionNarrative,
recommended_actions: severeRisk ? [
"Notify consignee of weather-related risk near USLAX.",
"Add 12–24 hours buffer to delivery commitment.",
"Enable dispatch contingency for alternate drayage window."
] : []
};
}
buildCustomerFacingETA().then(console.log).catch(console.error);
This pattern yields an ETA that isn’t just a date—it’s a defensible promise with supporting evidence and recommended actions.
Error Handling, Retries, and Observability
All FreightPulse endpoints return a top-level success boolean and either data or error. That uniform contract lets you implement a single middleware for validation, logging, and retries across services.
Typical error shape:
{
"success": false,
"error": "Human-readable message."
}
Best practices:
- Retries and backoff: Apply idempotent retries (e.g., 2–3 attempts) with exponential backoff and jitter for transient network failures. Respect HTTP semantics and avoid retry storms.
- Circuit breakers: Trip after consecutive failures to degrade gracefully. Serve cached data for read-heavy endpoints like /fuel-prices and /port-congestion.
- Health checks: Build a small canary job that periodically calls lightweight endpoints and reports SLOs to your observability stack.
- Schema guardrails: Validate that success is true and data is present. Log source fields (e.g., source, as_of) for auditing.
- Timeouts: Use conservative timeouts (e.g., 2–5 seconds) and measure end-to-end latency across your network perimeter.
Example Python utility wrapping calls with timeouts and structured logging:
import requests
import time
import logging
BASE = "https://freightpulsehq.com/api/v1"
HEADERS = {"X-API-Key": "YOUR_API_KEY"}
logging.basicConfig(level=logging.INFO)
def fetch_json(path, params=None, timeout=5.0, retries=2):
url = f"{BASE}{path}"
for attempt in range(retries + 1):
try:
r = requests.get(url, headers=HEADERS, params=params, timeout=timeout)
payload = r.json()
logging.info("fp_call path=%s status=%s success=%s", path, r.status_code, payload.get("success"))
if payload.get("success") is True:
return payload["data"]
else:
# known business error, no retry
logging.warning("fp_error path=%s error=%s", path, payload.get("error"))
return None
except Exception as e:
logging.exception("fp_exception path=%s attempt=%d", path, attempt)
if attempt < retries:
sleep = (2 ** attempt) * 0.25
time.sleep(sleep)
else:
return None
data = fetch_json("/fuel-prices")
print(data)
Observability and governance:
- Per-service credentials and roles: In your own systems, issue distinct credentials per microservice and environment to isolate blast radius and enable fine-grained audit logs.
- Trace IDs: Propagate correlation IDs from your edge to your FreightPulse call logs. Attach shipment_id, quote_id, and port codes as structured fields.
- Data locality: Store only what you need; persist normalized summaries (e.g., diesel averages, congestion ratios) to drive UI performance while keeping source-of-truth calls fresh.
End-to-End Examples by Endpoint
This section provides additional, concrete JSON examples across key endpoints so you can see realistic payloads you’ll parse in production, with guidance on interpreting fields to drive customer-facing narratives.
Fuel Prices: Example and Field Usage
{
"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
}
}
}
}
}
- Use national_average for your FSC index; show change_percent for weekly communications.
- Render regions in a map layer or lane-analytics view for PADD-aware routing policies.
- historical.yoy_change_percent is a great KPI for quarterly shipper business reviews.
Freight Rates: Example and Field Usage
{
"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"
}
}
- Derive SLA targets directly from delivery_date; expose both a best-case and buffer-added estimate if risk overlays exist.
- Retain source for service-level reporting and vendor management.
Port Congestion: Example and Field Usage
{
"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
}
}
]
}
}
- Display “as_of” in UI to set expectations (lagged by ~6–7 days). This is a planning signal, not a real-time queue estimate.
- ratio_vs_baseline is ideal for sparkline trend cards and “change vs last quarter” insights.
Carrier Lookup: Example and Field Usage
{
"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"
}
}
]
}
}
- Display status prominently next to the assigned carrier. If not active, block booking and recommend alternatives.
- Record snapshots in your tender audit log to improve compliance reporting.
Disruptions: Example and Field Usage
{
"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"
}
]
}
}
- Map severity to ETA buffers and customer messaging. Include a “why” tooltip linking the title and type.
- Attach disruption id to shipments for deduplication and de-risked notifications.
Real-World Use Cases You Can Ship This Quarter
1) Customer-Facing ETA Widget with Risk Narratives
Build a reusable widget that shows a baseline ETA (from /freight-rates), then layers risk banners if /disruptions returns moderate/high events near relevant ports. For ocean-linked legs, add a macro context line from /port-congestion (ratio_vs_baseline + as_of) so customers understand whether delays are structural rather than operational. Endpoints used: /freight-rates, /disruptions, /port-congestion.
2) Transparent Fuel-Surcharge Calculator and Explainer
Integrate /fuel-prices for current national and regional diesel averages, and graph the trend line from /historical. Display the precise FSC formula and cite current national_average and change_percent so shippers see that surcharges reflect market movements, not guesswork. Endpoints used: /fuel-prices, /historical.
3) Carrier Vetting and Tender Compliance Panel
Before tendering, automatically run /carriers against the selected trucking provider’s DOT number. If status is not active or the safety_rating is concerning, flag the tender and propose alternatives. This reduces risk exposure and speeds up audits. Endpoints used: /carriers.
4) Port-Centric Forecasting Sidebar for Forwarders
Add a “Port Outlook” sidebar to your booking or tracking page. Query /port-congestion for key ports (Shanghai, Singapore, Rotterdam, Los Angeles-Long Beach, and others) and show ratio_vs_baseline over time from /historical (port_congestion:<portid>). Pair with /disruptions to annotate macro vs acute risk. Endpoints used: /port-congestion, /historical, /disruptions.
5) SLA Breach Early-Warning Service for 3PL CS Teams
Run a periodic job that scans active shipments by lane/port, pulls fresh /disruptions for nearby hazards, and compares against planned delivery windows from /freight-rates. If high-severity risk is detected, create a ticket with pre-filled exception narrative and suggested remediation steps. Endpoints used: /disruptions, /freight-rates.
Performance Tips and Integration Patterns
- Memoize known-stable signals: /fuel-prices and /port-congestion are not high-churn within short intervals; cache responses in your edge layer for rapid UI renders.
- Normalize shapes: Since all endpoints share the success/data schema, write a single deserializer and wrap each call for consistent logs and analytics.
- Latency-aware UI: Kick off calls in parallel when assembling composite views (ETA + disruptions + congestion + fuel). A single page can fetch multiple endpoints concurrently.
- Fallback chains: When a call fails, serve the last-known-good cached payload with an understated “data refreshed X min ago” note. Record that fallback in your observability stack.
- Regional routing and edge workers: Host your aggregation logic near your users. For example, run the top-level assembly in an edge function to keep TTFB low on tracking pages.
Frequently Asked Questions
How often do FreightPulse fuel prices update?
Fuel prices reflect EIA updates and include national averages plus PADD region breakdowns. We also provide historical bands (30d, 90d, YoY) so you can narrate trends alongside your FSC formula and show how current values compare to rolling norms.
Can I look up ocean carriers as well as trucking carriers?
Yes. The /carriers endpoint supports trucking (FMCSA SAFER) and ocean NVOCC/OTI lookups (FMC directory) via the type parameter. For trucking, query by DOT or name; for ocean, use organization numbers or names to validate partners.
Does the port congestion data reflect real-time vessel wait times?
No. Congestion is an approximation based on IMF PortWatch AIS-derived portcalls and is reported as a 7-day average relative to a 90-day baseline. The data is lagged by roughly 6–7 days, making it ideal for trend analysis and expectation-setting—not live queue monitoring.
Can I filter disruption alerts by proximity to a specific port?
Yes. Use the port parameter on /disruptions to return events within a fixed radius around a port (300 km globally, 100 km for US weather). This enables targeted, shipment-relevant risk narratives that your CS team can present proactively.
What’s the response contract for errors, and how should I handle them?
Every response includes a top-level success flag. If success=false, the body includes an error message. Implement retries with exponential backoff for transient issues and serve cached data gracefully where appropriate to keep your customer pages responsive.
Conclusion + Call to Action
Real-time customer-facing ETAs aren’t just about speed—they’re about context. When you combine a precise delivery window with a clear exception narrative and data-backed cost explanation, your customer success team moves from defensive firefighting to proactive trust-building. That’s how you reduce churn, accelerate issue resolution, and turn your portal into the single source of truth your shippers prefer.
With FreightPulse, you don’t need to wire five different feeds, normalize their shapes, and maintain brittle adapters. You can fetch diesel indices, live FTL transit windows, disruption alerts near critical ports, congestion trends, and carrier verifications from one consistent REST interface, with fields designed for production-grade SLAs, dashboards, and audit trails. It’s the fastest path from prototype to a customer-facing experience your team can stand behind.
If you’re ready to deliver ETAs and exception narratives that earn trust, explore the endpoints in this post and start integrating them into your quoting, tracking, and CS playbooks today. Visit FreightPulse to learn more, and Try FreightPulse for free to build your first customer-facing ETA widget with disruption-aware narratives and transparent surcharge explanations.