Modern 3PLs and logistics operators are under relentless pressure to make faster decisions with cleaner data—especially when onboarding new carriers and verifying compliance across truckload and ocean. The challenge is rarely a single missing field; it’s the maze of fragmented systems and delayed intelligence that turns a straightforward “Can this carrier legally haul my load, at what price, with what risk?” into a day-long chase. One vendor gives you FMCSA status, another sells AIS-derived congestion, a third provides freight rate quotes, and a fourth fires weather alerts—but none of them correlate the events that matter along the journey of a shipment or the lifecycle of a carrier relationship.
This post shows how to use event correlation across carriers, freight quotes, fuel indexes, port congestion, and natural-disruption alerts to build automated onboarding and continuous compliance verification flows. Rather than wiring five feeds and building your own observability and retries, you can consolidate the data behind a single, developer-friendly surface. The result: fewer manual checks, faster time to acceptance decisions, and proactive risk controls that trigger before a violation or weather event derails a shipment—or worse, a customer relationship.
We’ll walk through practical steps using FreightPulse, including lookups for FMCSA and FMC carriers, live US FTL quotes, EIA fuel series, IMF PortWatch–based port congestion, and GDACS/USGS/NOAA natural-disruption alerts. Along the way, you’ll learn how to interpret the responses, correlate events, handle edge cases, and ship with operational reliability.
Why FreightPulse
If you’ve ever stitched together EIA fuel data, FMCSA carrier status, a freight quote provider, and an AIS-based congestion feed, you already know the hidden effort: mismatched schemas, missing fields, changing vendor rate limits, and brittle retry logic. FreightPulse removes the multi-vendor sprawl by consolidating this data into one cohesive REST API, with consistent response shapes and pragmatic, production-ready defaults. Here are a few practical reasons teams adopt it:
- Unified schema for all logistics intelligence. The EIA weekly diesel series, a live US FTL quote, an FMCSA carrier lookup, an IMF PortWatch congestion snapshot, and a NOAA severe-weather alert all come back in the same JSON envelope: {"success":true|false,"data":{...}}. That means you can standardize parsing, validation, and error handling once and re-use across workflows.
- One API for onboarding and run-time risk controls. Carrier vetting (FMCSA/FMC), lane pricing (FTL quotes), and environment-aware checks (disruptions filtered near a specific port) live under the same base URL. This dramatically simplifies event correlation—e.g., “Accept carrier if active + safety OK + rate within threshold + no high-severity disruption near port.”
- Clear, honest data semantics. Port congestion is an informed approximation built from IMF PortWatch AIS data: a seven-day average of port calls versus a 90-day baseline with a six–seven-day lag. You get valuable trend and load-balancing insight without overpromising real-time berth wait times.
- Developer ergonomics from day one. Clean endpoints, logical parameters, and practical defaults allow you to ship a minimal carrier-vetting MVP in hours—not weeks. The same API surfaces support backend services, internal operations tools, and analytics dashboards without a schema fork.
In short: what used to be five feeds, five different schemas, five different retry strategies, and five different vendor dashboards is now one cohesive API designed for developers and operators building modern supply chain systems.
Quick Start
Base URL: https://freightpulsehq.com/api/v1
All responses follow a consistent envelope: {"success": true/false, "data": {...}, "error": "..."} (when success is false). The examples below show two of the fastest calls you can make to begin validating a carrier vetting flow while also sampling market conditions for pricing.
Example 1: Retrieve national fuel prices to power a fuel-surcharge calculator or baseline your TMS’s weekly adjustments.
curl -H "X-API-Key: YOUR_API_KEY" \
"https://freightpulsehq.com/api/v1/fuel-prices"
{
"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 and why they matter:
- data.diesel.national_average: The core input for a fuel-surcharge index. Apply your carrier contract formula to translate into a per-mile or per-load adjustment.
- data.diesel.regions.*: Helpful for regionalized surcharges or scenario planning when routing across PADD regions.
- data.diesel.historical: Support trend charts and change detection (e.g., automatically notify when 90d_avg deviates beyond set thresholds).
Example 2: Query a carrier by DOT number during onboarding, then fuse the outcome with other checks (e.g., safety, drivers on file).
curl -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"
}
}
]
}
}
Key fields and why they matter:
- results[].status: “active” indicates the carrier is authorized. Build decision rules that gate acceptance if status is inactive, suspended, or missing.
- results[].safety_rating: A single letter that can drive automated risk thresholds (e.g., block loads if unrated or out-of-service signals are detected through related logic).
- results[].drivers: Cross-check claims about available capacity or verify against your internal safety/compliance model.
Core Endpoints
1) Carrier lookups for onboarding and compliance — GET /carriers
Purpose: Verify carrier legitimacy and risk posture during onboarding, dispatch, or periodic compliance audits. FreightPulse aggregates FMCSA SAFER data for US trucking carriers and FMC NVOCC/OTI lookups for ocean. Air returns available:false to avoid false expectations.
Key parameters:
- q (required): DOT number or legal name for trucking; organization number or name for ocean.
- type (optional): trucking (default) | ocean | air.
curl -H "X-API-Key: YOUR_API_KEY" \
"https://freightpulsehq.com/api/v1/carriers?q=MAERSK&type=ocean"
{
"success": true,
"data": {
"type": "ocean",
"query": "MAERSK",
"results": [
{
"org_number": "123456",
"legal_name": "A.P. MØLLER–MÆRSK A/S",
"status": "active",
"category": "NVOCC/OTI",
"address": {
"city": "Copenhagen",
"state": null,
"country": "DK"
}
}
]
}
}
Field breakdown and usage:
- data.type: Confirms whether you queried the trucking or ocean directory; drives downstream UI copy and validation rules.
- results[].status: Primary gating flag for acceptance or audit escalation.
- results[].category (ocean): Indicates whether the entity is an NVOCC/OTI; useful for ocean compliance and routing.
Error handling tips:
- 422 if q is missing. Provide the user a clear nudge to enter DOT number or legal name.
- Empty results array is not an error; treat it as “not found” and route to manual verification.
2) Disruption intelligence for proactive risk gating — GET /disruptions
Purpose: Automate “environment-aware” checks during onboarding or dispatch by filtering for natural hazards near relevant ports or geographies. FreightPulse consolidates GDACS, USGS, and NOAA/NWS (US weather) to give a single view of cyclones, earthquakes, floods, volcanoes, droughts, wildfires, and severe weather. For ports, you can filter by proximity to catch potential impacts before they materialize in delays or safety issues.
Key parameters:
- type: cyclone | earthquake | flood | volcano | drought | wildfire | severe_weather.
- severity: low | moderate | high.
- country: ISO or full country name filter.
- port: LOCODE or port name filter by distance (300 km radius; 100 km for US weather).
curl -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 breakdown and usage:
- results[].type and severity: Drive routing decisions and SLA commitments. For example, block ocean bookings when “high” severity cyclones are near the origin port within 48–72 hours.
- results[].starts_at: Schedule-based risk gating—e.g., embargo windows on new loads if a disruption is forecast to start within your cutoff threshold.
- results[].source: Trust and traceability for auditors and customer communications.
Operational tips:
- Correlate disruptions with /port-congestion data for balanced decisions: a moderate cyclone plus moderate congestion may still be viable; a high-severity cyclone with already high congestion suggests deferring or rerouting.
- Implement periodic refresh (e.g., every hour) and incorporate idempotent processing keyed by results[].id to avoid duplicate alerts.
3) Port congestion to steer bookings and expectations — GET /port-congestion
Purpose: Provide a 7-day average of port calls relative to a 90-day baseline to understand whether port activity is depressed or elevated, approximating congestion trends. It is built from IMF PortWatch AIS data and intentionally lagged by ~6–7 days. Use it for trend-aware planning and expectation setting—not live berth wait times.
Key parameters:
- At least one of: port (name or LOCODE like USLAX), country (name or ISO3), region (continent).
- congestion: Optional filter low | moderate | high.
curl -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 breakdown and usage:
- metrics.recent_avg_portcalls_per_day vs baseline_avg_portcalls_per_day: Core for detecting deviations from normal activity. Below-baseline often suggests bottlenecks or unusual operating conditions.
- congestion and ratio_vs_baseline: Human-friendly indicator for ops and customer comms, plus a numeric factor for algorithms choosing alternate ports.
- as_of: Remember the lag; do not treat as live. Combine with /disruptions for current hazards and /historical for trend lines.
4) Live truckload pricing to contextualize onboarding decisions — GET /freight-rates
Purpose: During onboarding, it’s common to benchmark a new carrier’s submitted rate against a market reference. FreightPulse integrates live US FTL quotes (via Warp) so you can quickly gauge competitiveness for a lane before you invest effort in deeper qualification.
Key parameters:
- mode: trucking (default) | ocean | air.
- For trucking: origin_zip, destination_zip (required).
- Optional: pickup_date, qty, total_weight_lb. For ocean: container_size; for ocean/air: origin_country + dest_zip.
curl -H "X-API-Key: YOUR_API_KEY" \
"https://freightpulsehq.com/api/v1/freight-rates?mode=trucking&origin_zip=10001&destination_zip=90210"
{
"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 breakdown and usage:
- price_usd: Anchor for evaluating whether a carrier’s quote is fair-market; can drive auto-accept rules (e.g., accept if submitted quote is within ±10% of live benchmark).
- transit_days, pickup_date, delivery_date: Feed ETA and service expectation comparisons directly into your TMS quote screens.
- Behavior note: If required params are missing, you’ll receive success:true with available:false in data. Treat that as a graceful “no quote” outcome rather than an error.
5) Fuel prices and historicals to complete the pricing stack — GET /fuel-prices and GET /historical
Purpose: Live truckload quotes answer “What is the market now?” while EIA diesel and gasoline series answer “What has the trend been, and what should our surcharge be?” FreightPulse gives you both surfaces—current aggregates and time series—for dashboards and automated pricing models.
Key parameters:
- /fuel-prices has no required parameters; returns a snapshot with national/regional averages and 30d/90d/YoY references.
- /historical requires metric and optionally period (30d default | 90d | 1y). Metrics include fuel_price_diesel_national, fuel_price_gasoline_national, and port_congestion:<portid>.
curl -H "X-API-Key: YOUR_API_KEY" \
"https://freightpulsehq.com/api/v1/historical?metric=fuel_price_diesel_national&period=30d"
{
"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 breakdown and usage:
- data.series[].date, value: Feed straight into charting libraries; compute moving averages or apply your surcharge logic.
- metric: Useful for generic chart components that render different time series (diesel vs gasoline vs port congestion) from the same code path.
From Data to Decisions: Event Correlation for Onboarding and Continuous Compliance
A robust onboarding or compliance pipeline coordinates multiple checks: identity (carrier lookup), market sanity (pricing), environmental risk (disruptions), and flow constraints (port congestion) with financial normalization (fuel). FreightPulse’s consistent schemas enable you to orchestrate these checks in parallel, then correlate into a single decision matrix. Here’s a reference flow:
- Step 1 — Verify identity and status: /carriers with DOT or legal name. Gate early if status != active.
- Step 2 — Sanity-check market competitiveness: /freight-rates with the intended lane parameters. If submitted quote deviates significantly without justification, route to manual review.
- Step 3 — Environmental risk near key nodes: /disruptions with port=LOCODE for origin/destination ports; optionally filter severity=high to auto-block.
- Step 4 — Throughput trends: /port-congestion for ports in play. If ratio_vs_baseline is sharply below 1.0 and flagged as high congestion, inform SLAs or propose alternate ports.
- Step 5 — Pricing normalization: /fuel-prices and /historical for diesel to apply or validate your fuel-surcharge model, aligning internal margin targets.
Because all responses share a {"success", "data"} envelope, you can pipe results into a single evaluator with composable rules. For example:
- If carriers.status == "active" AND (rates.price_usd within ±12% of market) AND disruptions.severity != "high" near relevant port AND port_congestion.congestion != "high", then auto-approve.
- Else require manual review, with the evaluator furnishing a reason code (e.g., REASON=HIGH_DISRUPTION or REASON=OFF_MARKET_QUOTE).
End-to-End Example: Correlated Checks with Python
The following Python-like flow demonstrates correlating carriers, rates, congestion, disruptions, and fuel. It uses synchronous calls for clarity; in production, run them concurrently with retries and circuit breakers.
import os
import requests
BASE = "https://freightpulsehq.com/api/v1"
HEADERS = {"X-API-Key": os.getenv("FP_API_KEY", "YOUR_API_KEY")}
def get_carrier(dot):
r = requests.get(f"{BASE}/carriers", headers=HEADERS, params={"q": str(dot)})
return r.json()
def get_truck_rate(origin_zip, destination_zip):
r = requests.get(f"{BASE}/freight-rates", headers=HEADERS, params={
"mode": "trucking",
"origin_zip": origin_zip,
"destination_zip": destination_zip
})
return r.json()
def get_port_congestion(locode):
r = requests.get(f"{BASE}/port-congestion", headers=HEADERS, params={"port": locode})
return r.json()
def get_disruptions_near_port(locode, severity="high"):
r = requests.get(f"{BASE}/disruptions", headers=HEADERS, params={"port": locode, "severity": severity})
return r.json()
def get_fuel_prices():
r = requests.get(f"{BASE}/fuel-prices", headers=HEADERS)
return r.json()
def evaluate(dot, origin_zip, destination_zip, origin_port):
carrier = get_carrier(dot)
rates = get_truck_rate(origin_zip, destination_zip)
congestion = get_port_congestion(origin_port)
disruptions = get_disruptions_near_port(origin_port, "high")
fuel = get_fuel_prices()
if not carrier.get("success"): return {"decision": "review", "reason": "carrier_error"}
if not rates.get("success"): return {"decision": "review", "reason": "rate_error"}
if not congestion.get("success"): return {"decision": "review", "reason": "congestion_error"}
if not disruptions.get("success"): return {"decision": "review", "reason": "disruption_error"}
if not fuel.get("success"): return {"decision": "review", "reason": "fuel_error"}
c = carrier["data"]["results"][0] if carrier["data"]["results"] else None
if not c or c.get("status") != "active":
return {"decision": "reject", "reason": "inactive_or_not_found"}
price = rates["data"].get("price_usd")
if price is None:
return {"decision": "review", "reason": "no_market_quote"}
high_disruptions = disruptions["data"].get("results", [])
if high_disruptions:
return {"decision": "hold", "reason": "high_severity_disruption_near_port"}
cong = congestion["data"]["results"][0] if congestion["data"]["results"] else None
if cong and cong.get("congestion") == "high":
return {"decision": "review", "reason": "high_congestion"}
diesel = fuel["data"]["data"]["diesel"]["national_average"]
return {"decision": "approve", "reason": "meets_criteria", "diesel_index": diesel, "market_price_usd": price}
result = evaluate(54283, "10001", "90210", "USLAX")
print(result)
In practice, you would:
- Parallelize the calls for latency.
- Add exponential backoff on network failures.
- Cache slower-moving data like /fuel-prices and /port-congestion to save time on subsequent runs.
JavaScript Example: Building a Frontend Vetting Panel
A simple browser-based panel can call FreightPulse endpoints server-side via a proxy or directly in Node.js. Below is a Node/Express style snippet fetching correlated insights for a vetting page.
import express from "express";
import fetch from "node-fetch";
const app = express();
const BASE = "https://freightpulsehq.com/api/v1";
const API_KEY = process.env.FP_API_KEY || "YOUR_API_KEY";
const fp = (path, params = {}) => {
const url = new URL(path, BASE);
Object.keys(params).forEach(k => url.searchParams.append(k, params[k]));
return fetch(url.toString(), {
headers: { "X-API-Key": API_KEY }
}).then(r => r.json());
};
app.get("/api/vetting", async (req, res) => {
try {
const { dot, oz, dz, port } = req.query;
const [carrier, rates, congestion, disruptions, fuel] = await Promise.all([
fp("/carriers", { q: dot }),
fp("/freight-rates", { mode: "trucking", origin_zip: oz, destination_zip: dz }),
fp("/port-congestion", { port }),
fp("/disruptions", { port, severity: "high" }),
fp("/fuel-prices")
]);
res.json({
carrier,
rates,
congestion,
disruptions,
fuel
});
} catch (e) {
res.status(500).json({ success: false, error: "Internal error" });
}
});
app.listen(3000, () => console.log("Vetting panel running on 3000"));
Use UI affordances to show “active/inactive” carriers, current market rate anchors, congestion badges, and disruption banners. Because FreightPulse responses are harmonized, you can reuse your fetch-and-parse wrappers for any endpoint.
Operational Reliability: Retries, Backoff, Observability, and Governance
Production logistics software lives and dies by reliability. Align your FreightPulse integration with the following best practices:
- Retries and backoff: Implement exponential backoff with jitter for transient network failures. Keep idempotency by using deterministic request parameters and ensuring your job runner can safely retry without duplicating downstream side effects.
- Health checks and circuit breakers: Add lightweight health checks against a fast endpoint (e.g., /fuel-prices) in your background workers. Use circuit breakers to shed non-critical features if upstream availability degrades, preserving onboarding flows that must remain available.
- Caching and data freshness: Cache slow-moving datasets like /fuel-prices and /port-congestion for minutes to hours depending on your SLA. Avoid stale caches for /freight-rates and /disruptions where timeliness is crucial.
- Observability: Centralize logs of request parameters, response metadata (success flag, timing), and error messages. Enrich alerts with the endpoint name and a correlation ID so on-call teams can triage quickly.
- Governance controls: Scope per-application credentials server-side, isolate secrets, and log usage by service. Separate onboarding, dispatch, and analytics services to tighten blast radius and simplify audits.
- Regional routing and latency: Run your services in regions closest to your users and carriers. Co-locate your FreightPulse–calling workers with your core application clusters to minimize latency.
These patterns help future-proof your integration as volume scales and your compliance surface grows. Because FreightPulse normalizes responses, your telemetry and dashboards remain consistent across endpoints.
Real-World Use Cases
Here are three concrete builds you can ship quickly:
- Carrier Vetting Assistant for 3PL Onboarding: Operators enter a DOT number and origin/destination ZIPs. Your backend calls /carriers to verify active status and safety rating, /freight-rates to benchmark commercial viability, /disruptions with port filters if an ocean leg is involved, and /port-congestion for schedule risk. Decision rules then produce “Auto-Approve,” “Needs Review,” or “Hold.”
- Fuel-Surcharge Calculator with Market Validation: Use /fuel-prices for the weekly diesel index and /historical for trend smoothing, then apply your surcharge formula to live US FTL quotes from /freight-rates. Present the calculated surcharge and a confidence score derived from trend stability.
- Port Risk Dashboard for Freight Forwarders: Pull /port-congestion for multiple key ports to render recent_vs_baseline ratios over time via /historical (port_congestion:<portid>). Overlay /disruptions filtered by port radius, with severity-coded markers. Recommend alternate ports when congestion is “high” and nearby disruptions are non-trivial.
Detailed Endpoint Walkthroughs with Complete JSON
A) GET /carriers — Trucking example with detailed parsing
curl -H "X-API-Key: YOUR_API_KEY" \
"https://freightpulsehq.com/api/v1/carriers?q=SWIFT%20TRANSPORTATION"
{
"success": true,
"data": {
"type": "trucking",
"query": "SWIFT TRANSPORTATION",
"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"
}
}
]
}
}
- dot_number: Normalize into your carrier master as the primary external key to avoid duplicate vendor records.
- safety_rating: Trigger escalation if missing or below your threshold.
- drivers: Sanity-check capacity claims; no need to overfit, but useful as a heuristic input.
B) GET /disruptions — Filtering multiple types
curl -H "X-API-Key: YOUR_API_KEY" \
"https://freightpulsehq.com/api/v1/disruptions?type=severe_weather&country=US"
{
"success": true,
"data": {
"results": [
{
"id": "nws:SW:TX-20260818-001",
"type": "severe_weather",
"severity": "high",
"title": "Excessive Heat Warning - Dallas County",
"country": "United States",
"starts_at": "2026-08-18T10:00:00Z",
"source": "NOAA/NWS"
},
{
"id": "nws:SW:FL-20260818-002",
"type": "severe_weather",
"severity": "moderate",
"title": "Tropical Storm Watch - Miami-Dade",
"country": "United States",
"starts_at": "2026-08-19T18:00:00Z",
"source": "NOAA/NWS"
}
]
}
}
- Use severity filters in automated gating, with high mapping to hard “hold” and moderate prompting operator review.
- When paired with carrier domicile (address), you can preemptively flag potential driver availability constraints.
C) GET /port-congestion — Query by region for comparative analysis
curl -H "X-API-Key: YOUR_API_KEY" \
"https://freightpulsehq.com/api/v1/port-congestion?country=United%20States"
{
"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
}
},
{
"port": "Port of New York and New Jersey",
"locode": "US NYC",
"country": "United States",
"congestion": "low",
"as_of": "2026-08-14",
"metrics": {
"recent_avg_portcalls_per_day": 7.1,
"baseline_avg_portcalls_per_day": 7.3,
"ratio_vs_baseline": 0.97
}
}
]
}
}
- Compare ratio_vs_baseline across ports to automatically suggest alternates during booking if primary ports show sustained below-baseline activity.
- Persist as_of and ratio history (via /historical) to drive trend-aware routing rules.
D) GET /freight-rates — Missing parameters behavior
curl -H "X-API-Key: YOUR_API_KEY" \
"https://freightpulsehq.com/api/v1/freight-rates?mode=trucking"
{
"success": true,
"data": {
"available": false,
"mode": "trucking",
"reason": "Missing required origin_zip or destination_zip"
}
}
- Treat available:false as a valid, non-exceptional control path. Prompt the user to fill required fields rather than throwing a hard error.
E) GET /historical — Port congestion series
curl -H "X-API-Key: YOUR_API_KEY" \
"https://freightpulsehq.com/api/v1/historical?metric=port_congestion:USLAX&period=90d"
{
"success": true,
"data": {
"metric": "port_congestion:USLAX",
"period": "90d",
"series": [
{ "date": "2026-06-01", "value": 0.92 },
{ "date": "2026-06-08", "value": 0.88 },
{ "date": "2026-06-15", "value": 0.86 }
]
}
}
- value represents ratio_vs_baseline; use it to render normalized trend charts or trigger alerts when it crosses thresholds over consecutive weeks.
Error Scenarios and Defensive Engineering
While FreightPulse responses are harmonized, production code still needs to plan for validation errors, timeouts, and business-level misses. Key patterns:
- Input validation: Before calling /freight-rates, ensure both origin_zip and destination_zip are present. Expect a successful response with available:false when inputs are insufficient rather than an exception.
- Business-level not found: /carriers may return success:true with an empty results array. Translate this into a “not found” state for operator workflows.
- Error envelope: When success:false, you will receive {"success":false, "error":"Human-readable message."}. Log the error string and surface a concise, user-friendly message to operators.
- Partial correlation: If one signal is delayed (e.g., congestion lag), set decision rules to weight other current signals (e.g., disruptions) more heavily while flagging the decision as time-bounded.
End-to-End cURL Session for a Typical Vetting Run
Tie everything together via command line to test your pipeline in isolation:
# 1) Carrier identity and status
curl -H "X-API-Key: YOUR_API_KEY" \
"https://freightpulsehq.com/api/v1/carriers?q=54283"
# 2) Rate check for target lane
curl -H "X-API-Key: YOUR_API_KEY" \
"https://freightpulsehq.com/api/v1/freight-rates?mode=trucking&origin_zip=60601&destination_zip=77001"
# 3) Environment risk near relevant port
curl -H "X-API-Key: YOUR_API_KEY" \
"https://freightpulsehq.com/api/v1/disruptions?port=USLAX&severity=high"
# 4) Port trend context
curl -H "X-API-Key: YOUR_API_KEY" \
"https://freightpulsehq.com/api/v1/port-congestion?port=USLAX"
# 5) Fuel baseline for surcharge
curl -H "X-API-Key: YOUR_API_KEY" \
"https://freightpulsehq.com/api/v1/fuel-prices"
With these five calls, you can form a complete decision: legitimate and active carrier; market-aligned quote; acceptable environmental and throughput risk; and a known fuel baseline to price for margin integrity.
FAQ
How often do FreightPulse fuel prices update?
Fuel prices are sourced from the EIA and presented with national and PADD-region breakdowns. Use the timestamp and historical averages to detect changes week over week, and cache the payload in your app to minimize redundant fetches.
Can I look up ocean carriers as well as trucking carriers?
Yes. Use /carriers with type=ocean and a company name or organization number to query FMC NVOCC/OTI records. For US trucking carriers, omit type or set type=trucking and query by DOT number or legal name.
Does the port congestion data reflect real-time vessel wait times?
No. Congestion is a lagged approximation (~6–7 days) based on a 7-day average of port calls relative to a 90-day baseline. It is ideal for trend-aware planning and port selection but not a live AIS tracking substitute.
Can I filter natural-disruption alerts by proximity to a specific port?
Yes. Use /disruptions with the port parameter (LOCODE or name). Results are filtered within a set radius (typically 300 km; 100 km for US weather). Combine with severity to tailor automated gating logic.
What does the success field in responses signify?
Every response includes success. When true, data contains the payload; when false, error provides a human-readable message. This consistent shape simplifies error handling and logging across endpoints.
Conclusion + CTA
Carrier onboarding and continuous compliance don’t have to be a tangled web of point integrations and manual checks. By correlating identity (FMCSA/FMC), market benchmarks (live FTL quotes), environment signals (disruptions near ports), throughput trends (lagged congestion), and pricing baselines (EIA fuel), you can move from reactive to proactive—with machine-enforced guardrails and operator-friendly context. FreightPulse’s single, consistent API surface is the foundation for these flows.
Whether you are a 3PL automating new carrier approvals, a forwarder balancing port risk, or a shipper building a compliance-aware TMS, the path from proof-of-concept to production is straightforward. Integrate the endpoints shown here, add retries and observability, and start correlating events into decisions that your teams and customers can trust.
Build faster with unified logistics intelligence. Explore the endpoints showcased above at FreightPulse and put your onboarding and compliance verification workflows on autopilot. Ready to experiment today? Try FreightPulse for free and ship your first correlated decision flow in hours—not weeks.