Accelerating carrier onboarding is one of the most leverage-rich upgrades a 3PL can make. Yet most teams still stitch together manual lookups (FMCSA, FMC, Google, stale spreadsheets), copy/paste safety ratings out of SAFER, bounce between portals to check fuel surcharges, and ask ops to “eyeball” port conditions that could derail handoffs. The result is slow onboarding, missed SLAs, inconsistent compliance, and fragmented data trails that can’t stand up to audits.
This post shows how to build API-driven carrier validation flows that are fast, auditable, and production-ready using FreightPulse. FreightPulse consolidates the logistics intelligence you actually need—US FTL quotes, EIA fuel prices, FMCSA and FMC lookups, IMF PortWatch congestion, and natural-disruption alerts—into one REST API with a single response shape. You’ll see how to turn multi-hour onboarding checks into a few seconds of automated validation, with the exact fields an ops analyst, TMS, or compliance bot requires to greenlight a carrier.
We’ll walk through practical requests, complete JSON responses, field-by-field interpretations, and production tips. By the end, you’ll have a working pattern you can plug into your 3PL onboarding flow to verify carriers, estimate fuel surcharges, detect regional risks, and route freight with confidence—without juggling five different integrations.
Why FreightPulse
FreightPulse brings the core operational signals for a modern 3PL behind one consistent REST layer. Instead of wiring EIA for fuel, Warp (or other providers) for US FTL quotes, IMF PortWatch for congestion, FMCSA/FMC for carrier verification, and multiple hazard feeds for natural disruptions, you query a single API and receive a uniform response envelope you can parse once and reuse across services.
- Developer ergonomics: Every response follows the same shape—{"success": true|false, "data": {…}, "error": "…"}—so your client code paths and error handlers are predictable. Parse once, reuse across endpoints.
- Operational completeness: The endpoints map directly to what a 3PL needs during onboarding and tendering: FMCSA/FMC identity and safety context (/carriers), expected diesel series for fuel surcharge logic (/fuel-prices and /historical), live US FTL quotes to validate rate competitiveness (/freight-rates), congestion baselines at key ports to forecast knock-on impacts (/port-congestion and /historical), and natural-disruption signals that might impact driver safety or lane reliability (/disruptions).
- Faster validation with fewer moving parts: One API replaces scattered portals and paid AIS subscriptions just to infer congestion. You save integration time, remove “screen scraping,” and reduce operational jitter when external sites change layouts or rate-limit browsers.
- Production-first reliability: The API is built for machine consumption. You get explicit HTTP error codes for invalid parameters and exceeded quotas, plus human-readable messages in the unified error payload. This enables clean circuit-breaking, retries with backoff, and structured alerting in your services.
Bottom line: With FreightPulse, a new carrier can be validated for identity, safety posture, and environmental context in seconds using consistent JSON, and your TMS or onboarding portal can store the resulting artifacts for later audit.
Quick Start
FreightPulse is a standard JSON-over-HTTPS REST API. You can explore it from a terminal with curl or from code using your preferred HTTP client. The base URL for all requests is:
https://freightpulsehq.com/api/v1
Below is a first request to fetch current US diesel and gasoline prices with regional breakdowns and short historical context. This is immediately useful for computing a fuel surcharge baseline during onboarding.
curl -H "X-API-Key: YOUR_API_KEY" \
"https://freightpulsehq.com/api/v1/fuel-prices"
Example JSON response and what it means:
{
"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.data.diesel.national_average: The current diesel reference in USD/gal. Use this as the base index in your fuel surcharge calculator.
- data.data.diesel.regions.{…}: PADD-like regional references. Great for region-specific programs or for validating that a carrier’s surcharge aligns with their primary operating region.
- data.data.diesel.historical.30d_avg and 90d_avg: Stabilize your surcharge index over a rolling average to damp weekly volatility and reduce dispute risk.
- data.timestamp: Store this with your onboarding record to show exactly which index you referenced when you greenlit the carrier’s rate schedule.
Core Endpoints
1) /carriers — FMCSA trucking and FMC ocean verification
Carrier identity and compliance are the first blockers in any onboarding flow. With /carriers, you can look up US trucking carriers via FMCSA SAFER data, or validate ocean NVOCC/OTI registrations from the FMC directory. These are the canonical sources you need to prevent identity mix-ups and confirm operational status.
Endpoint:
GET /carriers
Key params:
- q (required): DOT number or legal name for trucking; org number or name for ocean.
- type: trucking (default) | ocean | air (air returns available:false).
Try a common US trucking carrier DOT number:
curl -H "X-API-Key: YOUR_API_KEY" \
"https://freightpulsehq.com/api/v1/carriers?q=54283"
Sample response:
{
"success": true,
"data": {
"type": "trucking",
"query": "54283",
"results": [
{
"dot_number": 54283,
"legal_name": "SWIFT TRANSPORTATION COMPANY OF ARIZONA LLC",
"status": "active",
"safety_rating": "S",
"drivers": 12883,
"address": {
"city": "Phoenix",
"state": "AZ",
"country": "US"
}
}
]
}
}
How to use it:
- dot_number and legal_name: Persist both for audit. Use exact matches to prevent impersonation and link to your TMS carrier master.
- status: Quick compliance gate (“active” vs “inactive”). Fail fast if not active.
- safety_rating: Incorporate into a risk scorecard. “S” typically denotes satisfactory. Flag conditional or unsatisfactory results for manual review.
- drivers: A rough capacity signal. Helpful when building predictive tendering rules or routing overflow.
- address: Use for region-scoped risk checks (e.g., compare carrier HQ region against regional diesel indices or local disruptions).
If you need to validate an ocean NVOCC/OTI:
curl -H "X-API-Key: YOUR_API_KEY" \
"https://freightpulsehq.com/api/v1/carriers?q=APL%20LOGISTICS&type=ocean"
Ocean responses return FMC-registered entities when available, enabling you to extend the same onboarding playbook to your ocean partners.
2) /fuel-prices — EIA-driven surcharge intelligence
Fuel surcharge arguments often derail great carrier relationships. Use /fuel-prices to anchor negotiations and automate surcharge updates with transparent, authoritative indices. You’ll reduce manual spreadsheet churn and keep customers, carriers, and finance aligned.
Endpoint:
GET /fuel-prices
No parameters are required. See Quick Start for a complete example response. For historical series tuned for charts and audits, use /historical (below).
Practical tips:
- Cache responses daily to avoid unnecessary calls; the EIA series typically updates weekly for diesel. Use data.timestamp to confirm freshness.
- Blend national_average with regional adjustments when a carrier’s lanes are region-heavy. A weighted approach can preempt disputes on special corridors.
- Store the weekly index and the resulting surcharge multiplier alongside each rate confirmation to produce defensible invoices later.
3) /freight-rates — Live US FTL quotes for spot checks and benchmarking
Once a carrier clears identity and safety gates, sanity-check their rate card against a real-time market reference. /freight-rates returns live FTL quotes for US trucking lanes (via Warp) in the same JSON envelope format you already parse elsewhere.
Endpoint:
GET /freight-rates
Key params (trucking):
- mode: trucking (default)
- origin_zip (required), destination_zip (required)
- pickup_date (optional), qty, total_weight_lb (optional)
Example request:
curl -H "X-API-Key: YOUR_API_KEY" \
"https://freightpulsehq.com/api/v1/freight-rates?mode=trucking&origin_zip=10001&destination_zip=90210"
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"
}
}
Interpreting the fields:
- price_usd: Use as a benchmark to validate a new carrier’s proposed lane rate. If a proposed rate is significantly above market, route for review; if below, ensure service levels and accessorials align to avoid hidden costs.
- transit_days, pickup_date, delivery_date: Use to detect unrealistic promises in a bid. If a carrier’s ETA claims are aggressive relative to reference transit days, require SLA confirmation or safety plan details.
- source: Capture for attribution in BI dashboards.
Note: If required parameters are missing, you’ll receive a 200 with "available": false in data rather than an error, which you can treat as a soft validation failure in your onboarding UI.
4) /port-congestion — Lagged congestion baseline for risk-aware routing
Port conditions shape downstream trucking reliability. /port-congestion returns a 7-day average of port calls versus a 90-day baseline (a lagged approximation ~6–7 days, not live AIS). That’s perfect for trend-aware routing and onboarding risk annotations, without paying for raw AIS feeds.
Endpoint:
GET /port-congestion
Key params:
- port (name or LOCODE like USLAX), or country (name/ISO3), or region (continent)
- congestion (optional filter): low | moderate | high
Example:
curl -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
}
}
]
}
}
What to do with it:
- congestion and ratio_vs_baseline: Annotate onboarding records for ocean-connected lanes. Moderate-to-high congestion risks can trigger playbooks (buffer time, proactive customer comms, flexible appointment windows).
- as_of: This data is lagged; never display it as real-time queue length. Use for trend context and forecasting, not same-day drayage schedule decisions.
- recent_avg vs baseline_avg: Build simple “heat” scoring to quantify trend deterioration or improvement for BI.
5) /disruptions — Natural hazard awareness near ports and in-country
Driver safety and ETAs hinge on what the weather and earth are doing. /disruptions consolidates signals from GDACS, USGS, and NOAA/NWS—cyclones, earthquakes, floods, wildfires, volcanoes, drought, severe weather—so your onboarding process can flag location-sensitive risks for a carrier’s primary lanes.
Endpoint:
GET /disruptions
Key params:
- type: cyclone | earthquake | flood | volcano | drought | wildfire | severe_weather
- severity: low | moderate | high
- country: Filter by country-level disruptions
- port: Filter by proximity to a port (300km radius generally, 100km for US weather)
Example:
curl -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"
}
]
}
}
How to use:
- Map a carrier’s primary operating regions and key ports; if a disruption intersects those areas at onboarding time, attach a note and monitoring reminder to the record.
- Route tenders to carriers least exposed to current hazards when viable. For US severe weather, the 100km radius helps you localize fast.
- Persist id and source for auditability of risk decisions.
6) /historical — Time series for dashboards and audit trails
Historical visibility cements trust: procurement wants to see last month’s diesel curve; ops wants to see how congestion evolved at Long Beach; finance wants a clean audit chain. /historical returns either weekly national fuel-price series or daily port-congestion series for ~20 curated major ports.
Endpoint:
GET /historical
Key params:
- metric (required): fuel_price_diesel_national | fuel_price_gasoline_national | port_congestion:<portid>
- period: 30d (default) | 90d | 1y
Example (diesel, 30d):
curl -H "X-API-Key: YOUR_API_KEY" \
"https://freightpulsehq.com/api/v1/historical?metric=fuel_price_diesel_national&period=30d"
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
}
]
}
}
Usage patterns:
- Plot series in onboarding dashboards so approvers see recent trends before approving a carrier’s surcharge schema.
- Store a snapshot of the time series at onboarding signoff to validate any back-tests and handle future disputes.
- For ports, pair with /port-congestion to render trend vs current classification in one view.
End-to-End Onboarding Blueprint Using FreightPulse
Let’s put the endpoints together in a practical 3PL onboarding flow:
- Identity and safety gate: Query /carriers with the submitted DOT or name. Fail closed if status != active or safety_rating indicates risk outside policy. Persist legal_name, dot_number, safety_rating, and drivers.
- Fuel surcharge alignment: Call /fuel-prices to capture the current diesel reference and compute your program’s surcharge band (e.g., per $0.05 above a baseline). If your program is region-weighted, leverage the regions map or pull /historical to smooth with 30d averages.
- Market sanity check: With the carrier’s representative lane pairings, request /freight-rates for 2–3 lanes. If proposed rates are materially off-market, flag for procurement review or request SLA justification.
- Contextual risk notes: If the carrier’s lanes are port-connected, consult /port-congestion for those ports and store the as_of, congestion classification, and ratio_vs_baseline. If there are active /disruptions near those ports or in their primary states, attach the event id and severity.
- Finalize and archive: Record all API responses with timestamps in the carrier’s onboarding packet. This creates an auditable, repeatable, and automated process that reduces manual effort and speeds carrier time-to-first-load.
Complete, Realistic JSON Examples You Can Paste Into Tests
Use the following samples to stub contract tests and to validate your parsing and error paths. They mirror real FreightPulse responses, including the unified success/data/error envelope.
Fuel prices (national + regions)
{
"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
}
}
}
}
}
Carrier lookup (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"
}
}
]
}
}
Live US FTL quote
{
"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 (lagged, 7d average vs 90d baseline)
{
"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
}
}
]
}
}
Disruptions near a port
{
"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"
}
]
}
}
Error Handling and Production-Ready Patterns
FreightPulse replies include explicit HTTP status codes and a consistent JSON body, which makes it straightforward to implement resilient clients.
- Unified envelope: success boolean, data object, error string (present only if success=false). Always check success first.
-
Common error codes to handle:
- 401 — Invalid or missing X-API-Key
- 403 — No active subscription
- 422 — Missing required parameter (e.g., q on /carriers)
- 429 — Monthly quota or per-minute rate limit exceeded
- Retries and backoff: Only retry idempotent GETs on transient failures (5xx or network timeouts). For 429, respect Retry-After if provided, otherwise apply exponential backoff with jitter.
- Circuit breakers: Trip a short circuit after repeated failures to avoid cascading timeouts in your onboarding service; use health checks to close the circuit.
- Observability: Log the endpoint, params, request id (if you add one), and success/error fields. Attach these logs to the carrier onboarding record for full traceability.
- Data governance: Store only what you need; redact keys from logs; attach timestamps from FreightPulse responses when producing decisions or audit artifacts.
Example of a defensive JavaScript fetch wrapper for unified parsing:
async function fpGet(path, params = {}) {
const qs = new URLSearchParams(params).toString();
const url = `https://freightpulsehq.com/api/v1/${path}${qs ? "?" + qs : ""}`;
const res = await fetch(url, {
headers: { "X-API-Key": "YOUR_API_KEY" }
});
const body = await res.json();
if (!res.ok || body.success === false) {
const message = body && body.error ? body.error : `HTTP ${res.status}`;
throw new Error(message);
}
return body.data;
}
// Example: safety-gate a DOT number
(async () => {
try {
const data = await fpGet("carriers", { q: "54283" });
const result = data.results[0];
if (!result || result.status !== "active") {
console.warn("Carrier not active; routing to manual review.");
} else {
console.log(`OK: ${result.legal_name}, rating ${result.safety_rating}`);
}
} catch (err) {
console.error("Lookup failed:", err.message);
}
})();
Real-World Use Cases
1) Automated carrier vetting tool for a 3PL onboarding portal
When a carrier submits a DOT number, your portal calls /carriers to validate legal_name, status, safety_rating, and drivers. If status != active or the rating violates policy, the system blocks approval and outputs a clear remediation path. Pair with /disruptions scoped to the carrier’s hub states to flag near-term weather risks in an onboarding note for dispatchers.
Endpoints used: /carriers, /disruptions.
2) Fuel-surcharge calculator embedded in rate confirmation
Build a widget that calls /fuel-prices for the current diesel national_average and regional indices, and /historical for a 30d average. Your formula can weight regions by lane mix, stabilize volatility with 30d_avg, and stamp the final multiplier into the confirmation so finance and customers see the exact index used on the approval date.
Endpoints used: /fuel-prices, /historical.
3) Port-aware onboarding scorecard for ocean-connected lanes
If a brokerage onboards a drayage partner or a TL carrier supporting a port, query /port-congestion with the relevant LOCODE and pull the current congestion classification and ratio_vs_baseline. Show a traffic-light indicator and a short recommendation (e.g., “Moderate congestion: add 0.5 day buffer”). Add a /disruptions query near that port to catch cyclones or severe weather looming within the week.
Endpoints used: /port-congestion, /disruptions.
Practical Implementation Guide: From Prototype to Production
To stand up a robust onboarding service, keep these implementation details in mind:
- Schema-first parsing: Because FreightPulse’s envelope is consistent, define one interface for {"success","data","error"} and reuse it across endpoints. Then define per-endpoint data types (e.g., CarrierResult, FuelPrices, FreightQuote).
- Validation and normalization: Normalize carrier names (e.g., uppercase, trim suffix punctuation) when comparing with internal TMS records. Treat DOT numbers as numeric identifiers but store them as strings to avoid integer rounding in some languages.
- Idempotency: Onboarding steps should be idempotent. If you create an onboarding record, attach external references (dot_number, as_of timestamps) so re-runs don’t produce divergent decisions without cause.
- Caching strategy: Fuel indices change weekly; cache for hours or a day based on your program needs. Live freight quotes are lane- and date-sensitive; do not cache long, but do dedupe duplicate requests in a short window (e.g., 2–5 minutes) using a request hash.
- Resilient UX: If /port-congestion or /disruptions are temporarily unavailable, don’t block the entire onboarding. Proceed with a warning and a reminder for a follow-up check before first tender.
- Alerting: Pipe 4xx/5xx error rates into your monitoring. For 422 validation issues (e.g., missing q), surface actionable hints to your operators or fix the client code. For 429, implement adaptive backoff and consider a job queue to spread requests.
Here is a concise Python example that unifies three checks—carrier, fuel, and a market quote—into one flow:
import requests
BASE = "https://freightpulsehq.com/api/v1"
HEADERS = {"X-API-Key": "YOUR_API_KEY"}
def fp_get(path, params=None):
r = requests.get(f"{BASE}/{path}", headers=HEADERS, params=params or {}, timeout=20)
r.raise_for_status()
body = r.json()
if not body.get("success", False):
raise RuntimeError(body.get("error", "Unknown error"))
return body["data"]
def vet_carrier(dot_or_name, lane):
# 1) Identity & safety
carriers = fp_get("carriers", {"q": dot_or_name})
result = carriers.get("results", [None])[0]
if not result:
return {"ok": False, "reason": "No carrier found"}
if result.get("status") != "active":
return {"ok": False, "reason": "Carrier not active", "carrier": result}
# 2) Fuel baseline
fuel = fp_get("fuel-prices", {})
diesel = fuel["data"]["diesel"]
fuel_baseline = diesel["national_average"]
# 3) Market sanity check
rates = fp_get("freight-rates", {
"mode": "trucking",
"origin_zip": lane["origin_zip"],
"destination_zip": lane["destination_zip"]
})
return {
"ok": True,
"carrier": result,
"fuel_usd_per_gal": fuel_baseline,
"quote_price_usd": rates.get("price_usd"),
"transit_days": rates.get("transit_days")
}
print(vet_carrier("54283", {"origin_zip": "10001", "destination_zip": "90210"}))
Endpoint-by-Endpoint Deep Dive: Parameters, Fields, and Best Practices
/carriers
- Purpose: Verify the legal identity and operational standing of US trucking carriers (FMCSA SAFER) and ocean NVOCC/OTI entities (FMC).
-
Critical fields:
- dot_number: Primary key for US trucking carriers; anchor in your TMS.
- legal_name: Canonical legal entity; store for audits and contract docs.
- status: “active” implies operational. Non-active should block auto-approval.
- safety_rating: Feed your risk score and lane assignment rules.
- drivers: Capacity signal for planning and tender rejection modeling.
- Error scenarios: 422 if q missing; 200 with empty results when no match. Handle both distinctly in your UX.
- Performance tip: Cache lookups per DOT name for a short TTL during onboarding sessions to reduce duplicate hits as users navigate tabs.
/fuel-prices
- Purpose: Establish authoritative fuel references for surcharge programs and rate transparency.
-
Critical fields:
- national_average: Plug into your surcharge formula.
- regions: Weight by the carrier’s operating footprint.
- historical.30d_avg and 90d_avg: Smooths volatility, reduces disputes.
- timestamp: Store for verifiable decision time.
- Error scenarios: Network timeouts or 5xx—retry with backoff; fuel updates are not minute-critical, so safe to retry.
- Performance tip: Daily cache; invalidate on expected weekly EIA release cadence.
/freight-rates
- Purpose: Benchmark proposed carrier rates with live US FTL market quotes; estimate transit expectations for SLAs.
-
Critical fields:
- price_usd: Market check for sanity and negotiation.
- transit_days, pickup_date, delivery_date: Temporal expectations for planning.
- service, source: Service type and attribution for BI.
- Error scenarios: Missing params return data.available=false with HTTP 200—treat as validation failure. 422 errors when malformed parameters are provided.
- Performance tip: Apply short-lived dedupe cache keyed by lane and pickup_date to avoid flooding the endpoint from multiple UI components.
/port-congestion
- Purpose: Provide a lagged, statistically smoothed view of port activity relative to a 90-day baseline, ideal for trend-informed onboarding notes and risk buffers.
-
Critical fields:
- congestion: low | moderate | high classification to drive playbooks.
- metrics.ratio_vs_baseline: Quantitative trend marker for BI and scoring.
- as_of: Make the lag explicit to users; do not present as live queues.
- Error scenarios: 422 for missing selection criteria (port|country|region). Validate inputs in your client before calling.
- Performance tip: Cache daily; this data has a ~6–7 day lag, so near-realtime polling is unnecessary.
/disruptions
- Purpose: Centralize natural-hazard intelligence near ports and regions to protect drivers and shipments.
-
Critical fields:
- type, severity: Drive alerting thresholds in your risk engine.
- title, starts_at: Human-readable summaries and scheduling impact.
- id, source: Persist for traceability and deduplication.
- Error scenarios: Validate port/type/severity params; aggressively handle empty results as “no active alerts” states.
- Performance tip: Poll on cadence aligned to hazard types (e.g., every 30–60 minutes for severe weather near US ports; slower for volcano/drought).
/historical
- Purpose: Provide time series for dashboards, analytics, and audit trails—fuel prices and curated port congestion histories.
-
Critical fields:
- series[{date, value}]: Plug directly into chart libraries.
- metric, period: Use in your labeling to avoid confusion in BI exports.
- Error scenarios: 422 if metric missing/invalid. Validate metrics on the client side to avoid noisy errors.
- Performance tip: Cache per metric/period; recompute trend analytics (e.g., moving averages) client-side to preserve flexibility.
Security, Reliability, and Observability Practices for Logistics APIs
Production onboarding pipelines deserve the same rigor as your order ingestion path. Apply these patterns when integrating FreightPulse:
- Least-privilege keys per service: Issue a distinct API credential per microservice or environment. This keeps blast radius small and enables targeted rotations and audit trails in your logs.
- Structured logging: Log endpoint, parameters (excluding secrets), response success/error, and decision outcomes (e.g., “carrier_approved: true”). These artifacts are invaluable in audits and RCAs.
- Health checks and fallbacks: If a non-critical endpoint (e.g., /port-congestion) is degraded, proceed with a warning and set a “pending_context” flag on the onboarding record; schedule a follow-up job to enrich later.
- Client-side timeouts: Avoid hanging onboarding sessions. Set sane timeouts (10–20s) and show operators a clear retry action if needed.
- Bulk enrichment jobs: For large carrier imports, implement a job queue with concurrency controls, retry policies, and dead-letter queues. Respect response semantics when deciding whether to retry (e.g., do not retry 422).
FAQ
How often do FreightPulse fuel prices update?
Diesel and gasoline data reflect EIA series, which typically update weekly for diesel. You can safely cache responses daily or until the next expected EIA publication. Use the timestamp field in the response to record the reference time used in your onboarding calculations.
Can I look up ocean carriers as well as trucking carriers?
Yes. The /carriers endpoint supports both trucking (FMCSA SAFER) and ocean NVOCC/OTI (FMC directory) lookups via the type parameter. Provide either a name or an appropriate identifier and parse the results array for your match.
Does the port congestion data reflect real-time vessel wait times?
No. /port-congestion provides a lagged approximation: a 7-day average of port calls against a 90-day baseline with a data lag around 6–7 days. It is best used for trend and planning context, not as a live queue length or same-day operational feed.
What hazards are included in disruptions, and can I filter by port proximity?
/disruptions consolidates natural hazards only—cyclones, earthquakes, floods, volcanoes, drought, wildfires, and severe weather—from GDACS, USGS, and NOAA/NWS. You can filter by country and by port proximity; port filters generally apply a 300km radius (100km for US weather), ideal for early warnings tied to specific gateways.
How should I handle missing parameters or invalid inputs?
Validate required parameters client-side to avoid 422 errors. Some endpoints, such as /freight-rates, return HTTP 200 with data.available=false when required lane parameters are missing—treat this as a soft validation failure and prompt users to complete the form.
Conclusion + CTA
Carrier onboarding is a mission-critical workflow that deserves automation, context, and auditability. With FreightPulse, you can verify identity and safety, anchor surcharge logic with authoritative fuel indices, sanity-check rates with live market quotes, quantify port trends, and flag natural hazards—using one consistent API. Your team ships faster, your decisions are traceable, and your operators spend less time tab-hopping and more time serving customers.
The fastest path from a spreadsheet-driven onboarding checklist to a production-grade, API-driven flow starts with a single integration. Wire in /carriers to eliminate identity uncertainty, plug in /fuel-prices and /historical to stabilize surcharges, use /freight-rates to benchmark bids, and enrich with /port-congestion and /disruptions for resilient planning. You’ll cut hours of manual work per carrier, improve compliance, and build trust across stakeholders with data-backed decisions.
Build your first automated validation in an afternoon. Explore the endpoints, paste the examples above into your tests, and start instrumenting your onboarding pipeline with live logistics intelligence. Visit FreightPulse to learn more, and Try FreightPulse for free to accelerate your next carrier onboarding cycle.