Logistics tendering shouldn’t require five vendor contracts, a pile of CSVs, and a war room of analysts to stitch together yesterday’s intel. Yet that’s exactly where many freight operators find themselves when chasing higher win rates: one data source for diesel benchmarks, another for truckload quotes, an AIS feed for port congestion, a government registry for carrier vetting, and a weather feed to guess if a storm will nuke your transit assumptions. Coordinating this patchwork increases engineering complexity, delays decisions, and—most importantly—undercuts your ability to quote accurately and fast during tenders or dynamic spot bids.
This post shows how to replace that patchwork with a single, developer-first API: FreightPulse. With one REST surface, you can pull live US FTL freight quotes, national and regional fuel prices, port congestion indices, FMCSA/FMC carrier verifications, and natural-disruption alerts. That unlocks a practical, end-to-end automation loop for tender scoring, bid calibration, and post-award monitoring. We’ll walk through concrete examples, full JSON payloads, and implementation tips, so you can go from prototype to production without pausing to negotiate yet another data feed.
We’ll focus on a core problem: how to increase tender and spot bid win rates without inflating risk. The key is pairing fast time-to-quote with defensible inputs—grounded rate intelligence for your lane, fuel surcharge logic that reflects current diesel, risk-adjusted transit expectations near congested ports, and carrier safety checks before you promise capacity. With FreightPulse, all the signals behind those decisions live in one place and share a consistent JSON schema. That simplicity lets your engineering team deliver tools your operators actually trust.
Why FreightPulse
Most teams lose momentum when they have to stitch together disparate feeds—or when the single feed they procured only solves a slice of the workflow. FreightPulse addresses the full tender-to-award loop with operational data that matters to FTL trucking, ocean-linked drayage, and multi-modal planning. Here are the differentiators that directly benefit developers and operators:
- One API, one schema, zero vendor sprawl: Fuel benchmarks (EIA), live FTL quotes (via Warp), port congestion trends (IMF PortWatch AIS-derived), carrier verification (FMCSA/FMC), and natural-disruption alerts (GDACS, USGS, NOAA/NWS) all arrive via the same REST interface and response envelope. Engineers spend less time normalizing payloads and more time building pricing, scoring, and routing features.
- Tender-ready data for quoting engines: Your bid calculator can combine current diesel averages, a lane-specific live quote, and a congestion-adjusted transit estimate in a single HTTP pass. Faster quotes with defensible assumptions elevate both win rate and post-award margin integrity.
- Practical risk context without a full AIS subscription: Port congestion is a common blind spot in landed-cost math. FreightPulse approximates congestion from IMF PortWatch AIS data as a ratio against a 90-day baseline. It’s not a live queue monitor, but it’s ideal for trend-aware buffers and tender risk scoring—without bolting on separate AIS tooling.
- Built for automation pipelines: Unified error shapes, consistent timestamping, and predictable field naming simplify retries, backoff, and health checks. As your quote engine scales, your fleet of microservices can treat FreightPulse as a single, observable dependency rather than juggling multiple rate and registry sources.
Quick Start
Base URL: https://freightpulsehq.com/api/v1
Let’s fetch national and regional fuel prices. This is often step one in a fuel-surcharge calculator used during tender pricing. Below is a minimal cURL example and a representative JSON response.
curl -s "https://freightpulsehq.com/api/v1/fuel-prices"
Representative 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 in context:
- data.diesel.national_average — The benchmark diesel price per gallon to anchor surcharge tables and normalize quotes across lanes.
- data.diesel.regions — PADD-region breakdown, helpful if your tender mandates region-specific fuel escalators.
- data.diesel.historical — Rolling 30/90-day averages and YoY change to add context or drive predictive adjustments in your pricing engine.
Core Endpoints for Tendering and Spot Bid Matching
1) Live FTL Freight Quotes — GET /freight-rates
Purpose: Retrieve a lane-specific, live US FTL truckload quote to seed your spot or contract bid. You can augment with weight, pickup date, and other attributes to align with your operational constraints.
Key parameters:
- mode — trucking (default), ocean, or air. For US FTL tendering, use trucking.
- origin_zip, destination_zip — Required for trucking; US ZIP codes for the lane.
- pickup_date, qty, total_weight_lb — Optional; improves the specificity of the quote.
Example request:
curl -s "https://freightpulsehq.com/api/v1/freight-rates?mode=trucking&origin_zip=77001&destination_zip=98101&pickup_date=2026-09-18&total_weight_lb=38000"
Representative response:
{
"success": true,
"data": {
"mode": "trucking",
"service": "FTL (53' dry van)",
"source": "Warp",
"price_usd": 3921.40,
"transit_days": 4,
"pickup_date": "2026-09-18",
"delivery_date": "2026-09-22"
}
}
How to use it:
- data.price_usd — Your baseline linehaul component. Combine with diesel surcharge logic sourced from /fuel-prices to produce a total bid.
- data.transit_days — Seed ETA assumptions; consider inflating if your downstream risk checks (port congestion, disruptions) suggest volatility.
- data.pickup_date, data.delivery_date — Commit windows for tender scoring and SLA modeling.
Notes:
- Missing required parameters yield an HTTP 200 with a payload indicating availability rather than an error; structure your client to detect this state and prompt for inputs.
2) Fuel Benchmarks — GET /fuel-prices
Purpose: Power a real-time fuel-surcharge calculator that automatically adjusts quotes as diesel moves. Eliminates manual table management and stale spreadsheet inputs that can torpedo margins post-award.
Key parameters: None required. The payload includes national and regional breakdowns with historical context.
Example request:
curl -s "https://freightpulsehq.com/api/v1/fuel-prices"
Representative response (abbreviated for focus on diesel):
{
"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
}
}
}
}
}
How to use it:
- data.data.diesel.national_average — Multiply by your per-mile fuel burn and lane miles to derive a surcharge component; adapt using regional values when tenders specify PADD logic.
- data.data.diesel.historical — Feed into a smoothing or hedging model to stabilize quotes across a tender window.
3) Port Congestion Trends — GET /port-congestion
Purpose: Many tenders include ocean legs or drayage linked to gateway ports. Congestion near a port can ripple into chassis availability, local pickups, or delay risk for inbound containers feeding FTL legs. Use this endpoint to score risk and adjust buffers or add “congestion-aware” premiums.
Important note: This data is a lagged approximation derived from IMF PortWatch (AIS-based). Expect ~6–7 days of lag and a 7-day average compared to a 90-day baseline. It is not a live vessel wait-time feed but is ideal for trend awareness and tender-time risk scoring.
Key parameters:
- port — Name or LOCODE (e.g., USLAX for Los Angeles-Long Beach).
- country, region — Alternative filters when port is not specified.
- congestion — Optional filter (low | moderate | high).
Example request:
curl -s "https://freightpulsehq.com/api/v1/port-congestion?port=USLAX"
Representative 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
}
}
]
}
}
How to use it:
- data.results[].congestion — Categorical risk flag (low, moderate, high) for tender scoring and mitigation playbooks.
- metrics.ratio_vs_baseline — The 7-day average versus a 90-day baseline; use this to drive a congestion uplift factor in drayage or transloading buffers.
- as_of — Remember this is lagged; be explicit with operations teams about what the signal represents.
4) Carrier Verification — GET /carriers
Purpose: Validate carriers at tender time (or before dispatch) to reduce safety and compliance risk. For US trucking, query FMCSA SAFER data; for ocean, query FMC directories. This eliminates manual registry lookups and spreadsheet rekeying.
Key parameters:
- q — Required search query (DOT number or name for trucking; org number or name for ocean).
- type — trucking (default) | ocean | air (air returns available:false).
Example request (trucking by DOT number):
curl -s "https://freightpulsehq.com/api/v1/carriers?q=54283&type=trucking"
Representative 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:
- results[].status — Verify active authority before awarding a lane.
- results[].safety_rating — Gate carriers with unacceptable safety ratings from your tender pool.
- results[].drivers — Proxy for capacity depth; useful when aligning tender award volumes.
5) Natural-Disruption Alerts — GET /disruptions
Purpose: Before you submit a bid—or before you lock a pickup date—scan for cyclones, earthquakes, or severe weather that might spike risk on the lane or near your handoff port. This endpoint consolidates GDACS, USGS, and NOAA/NWS natural hazards into a single queryable feed.
Key parameters:
- type — cyclone | earthquake | flood | volcano | drought | wildfire | severe_weather.
- severity — low | moderate | high.
- country — Filter by country.
- port — Filter by proximity to a specific port (e.g., USLAX). For US weather, a 100 km filter is applied; otherwise ~300 km.
Example request (high-severity disruptions near Los Angeles-Long Beach):
curl -s "https://freightpulsehq.com/api/v1/disruptions?port=USLAX&severity=high"
Representative 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 it:
- results[].type and results[].severity — Drive automated risk rules. For example, if severe_weather near a US port is high, add buffer days or switch to contingency carriers.
- results[].starts_at — Aligns with your pickup_date and delivery_date to determine likely impact windows.
6) Historical Series — GET /historical
Purpose: Historical series allow trend-aware pricing and operational planning. Use weekly national diesel series for long-term surcharge modeling or pull port congestion series for curated major ports to track trend shifts across a tender period.
Key parameters:
- metric — fuel_price_diesel_national | fuel_price_gasoline_national | port_congestion:<portid>.
- period — 30d (default) | 90d | 1y.
Example request (diesel, 30d):
curl -s "https://freightpulsehq.com/api/v1/historical?metric=fuel_price_diesel_national&period=30d"
Representative 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 }
]
}
}
How to use it:
- data.series — Feed rolling averages or volatility measures that stabilize bids across multi-round tenders. Combine with live prices to strike a balance between recency and predictability.
End-to-End Tender Automation Flow
Bringing these endpoints together enables a systematic tendering and spot bid engine:
- Pull a real-time linehaul reference for your lane via /freight-rates. Capture transit_days and delivery_date for a baseline schedule.
- Compute a lane-aware fuel surcharge from /fuel-prices (national or region) and incorporate your surcharge table rules. Optionally, include historical smoothing from /historical.
- If the tender has an ocean handoff or is drayage-adjacent, request /port-congestion for the relevant gateway to derive a congestion factor, applying a modest transit buffer or a risk premium multiplier.
- Query /disruptions for known hazards along key segments or near ports. If results exceed your severity threshold, adjust buffers or flag for human review.
- Verify capacity and compliance via /carriers for your intended partner carriers before the award.
The outcome is a quote that is faster to produce, better defended with current data, and less likely to be torpedoed by predictable (and now detected) risks.
Implementation Examples: cURL, Python, and JavaScript
Generate a Spot Quote With Risk Adjustments (Python)
import json
import math
import time
import urllib.parse
import urllib.request
BASE = "https://freightpulsehq.com/api/v1"
def http_get(path, params=None, headers=None):
qs = ("?" + urllib.parse.urlencode(params)) if params else ""
req = urllib.request.Request(BASE + path + qs, headers=headers or {})
with urllib.request.urlopen(req, timeout=20) as res:
return json.loads(res.read().decode("utf-8"))
def safe_ratio(x, y):
return (x / y) if (x is not None and y and y != 0) else 1.0
def compute_quote(origin_zip, dest_zip, pickup_date):
# 1) Live linehaul
rates = http_get("/freight-rates", {
"mode": "trucking",
"origin_zip": origin_zip,
"destination_zip": dest_zip,
"pickup_date": pickup_date
})
assert rates.get("success"), "Failed to fetch freight rates"
rate = rates["data"]
linehaul = rate.get("price_usd", 0.0)
transit_days = rate.get("transit_days", 0)
# 2) Fuel surcharge
fp = http_get("/fuel-prices")
assert fp.get("success"), "Failed to fetch fuel prices"
diesel = fp["data"]["data"]["diesel"]
diesel_avg = diesel["national_average"]
# Simple surcharge model: $0.04 per mile per $1.00 of diesel above a $1.25 baseline, for 2,100 miles
baseline_diesel = 1.25
per_mile_surcharge = 0.04 * max(diesel_avg - baseline_diesel, 0)
miles = 2100
fuel_surcharge = per_mile_surcharge * miles
# 3) Optional port congestion adjustment if relevant (e.g., gateway near dest)
cong = http_get("/port-congestion", {"port": "USLAX"})
congestion_factor = 1.0
if cong.get("success") and cong["data"]["results"]:
metrics = cong["data"]["results"][0]["metrics"]
ratio = metrics.get("ratio_vs_baseline", 1.0)
# If below baseline (0.85), modest relief; above baseline (>1.1), surcharge uplift
congestion_factor = 1.0 + max(min(ratio - 1.0, 0.15), -0.05)
# 4) Disruption scan near port (optional buffer days)
disrupt = http_get("/disruptions", {"port": "USLAX", "severity": "high"})
buffer_days = 0
if disrupt.get("success") and disrupt["data"]["results"]:
buffer_days = 1 # add one day for high severity
total_linehaul = (linehaul + fuel_surcharge) * congestion_factor
total_transit_days = transit_days + buffer_days
return {
"linehaul_usd": round(linehaul, 2),
"fuel_surcharge_usd": round(fuel_surcharge, 2),
"congestion_factor": round(congestion_factor, 3),
"total_usd": round(total_linehaul, 2),
"transit_days": total_transit_days,
"pickup_date": rate.get("pickup_date"),
"delivery_date": rate.get("delivery_date")
}
if __name__ == "__main__":
quote = compute_quote("77001", "98101", "2026-09-18")
print(json.dumps(quote, indent=2))
This end-to-end example shows how you can rapidly construct a risk-adjusted spot quote. In practice, you would also:
- Integrate carrier checks before finalizing a dispatch (see /carriers).
- Add backoff and retry logic on transient network issues and 429/5xx responses.
- Log response timestamps to understand data recency for audits.
Fuel Surcharge Widget (JavaScript/Fetch)
async function fetchFuelSurcharge(miles, mpg, baseline = 1.25, per_mile_per_diesel = 0.04) {
const res = await fetch("https://freightpulsehq.com/api/v1/fuel-prices");
const body = await res.json();
if (!body.success) throw new Error(body.error || "Fuel price fetch failed");
const diesel = body.data.data.diesel.national_average;
const per_mile = per_mile_per_diesel * Math.max(diesel - baseline, 0);
const surcharge = per_mile * miles;
return {
diesel,
surcharge: Number(surcharge.toFixed(2)),
};
}
fetchFuelSurcharge(1200, 6).then(console.log).catch(console.error);
Embed this in your quoting UI to show the surcharge component as diesel moves—improving both operator confidence and shipper transparency.
Real-World Use Cases
1) Tender Scoring Engine for a 3PL
A 3PL builds a tender scoring engine that ingests RFP lanes, fetches a live US FTL quote for each via /freight-rates, layers on current diesel benchmarks from /fuel-prices, and applies congestion-aware risk multipliers using /port-congestion. The engine flags lanes with high-severity /disruptions for manual review or adds buffer days automatically. Result: faster time-to-quote and tighter variance between promised and actual costs.
2) Carrier Vetting Copilot for Operations
A brokerage embeds a carrier verification panel inside its TMS. When an operator selects a carrier for a tendered lane, the system calls /carriers with DOT number or legal name, checks status and safety_rating, and alerts if the carrier is inactive or fails a safety threshold. This reduces last-minute scrambles and compliance risk during tender crunch time.
3) Port-Aware Drayage and Transload Scheduler
A forwarder automates drayage scheduling for inbound containers by polling /port-congestion for the main gateway and scanning /disruptions near that port. If congestion trends above baseline with a high ratio or a severe weather alert hits, the scheduler adds chassis lead time and notifies planners. The system also consults /historical port congestion series to contextualize whether the spike is anomalous or part of a trend, refining its buffer logic.
Error Handling and Reliability Patterns
Production-grade tender automation hinges on resilient integrations. FreightPulse responses use a consistent envelope: {"success": true/false, "data": {...}, "error": "message"}. Design your client to rely on this contract, including non-2xx errors and success=false cases where an informative error string is present.
Representative error payload:
{
"success": false,
"error": "Human-readable message."
}
Common scenarios and handling tips:
- 422 (missing required parameter): Validate inputs client-side before calling (e.g., ensure origin_zip and destination_zip on /freight-rates).
- 429 (quota or burst limits): Implement exponential backoff and jitter. Circuit-break your tender workflow to avoid cascading failures—fallback to cached signals where possible (e.g., yesterday’s diesel or last-known congestion).
- Partial availability returns: /freight-rates can return HTTP 200 with available:false semantics if parameters are incomplete. Inspect payload and prompt users accordingly.
- Observability: Log request URLs, timestamps, and success flags. Capture error messages for triage and add synthetic checks (e.g., hourly /fuel-prices pings) as health monitors.
Performance guidance:
- Batch reads: For multi-lane tenders, parallelize /freight-rates calls across lanes while respecting backoff on spikes.
- Cache lifetimes: Fuel and port congestion don’t change by the minute; leverage in-memory or Redis caches with appropriate TTLs (e.g., fuel: 24 hours; congestion: several days as it’s lagged; disruptions: shorter TTL like 30–60 minutes).
- Fallback chains: If port congestion is temporarily unavailable, degrade gracefully by using /historical trend medians before blocking your tender run.
- Health checks: Periodically probe lightweight endpoints to verify connectivity and response validity before launching a bulk pricing job.
Field-by-Field: Practical Interpretations
Across endpoints, a few fields are especially important for pricing, SLA commitments, and risk modeling:
- /freight-rates.data.price_usd — Direct input to linehaul; capture alongside transit_days to shape delivery windows. If your surcharge logic already accounts for fuel, ensure you don’t double count.
- /fuel-prices.data.diesel.national_average and regions — Decide whether to standardize against national or PADD values depending on tender rules. Historical fields support smoothing or sensitivity modeling.
- /port-congestion.metrics.ratio_vs_baseline — If ratio is significantly above 1.0, expect lower throughput and potentially longer cycle times around the port (chassis, gates, labor). Use categorical congestion alongside ratio to drive rules in your engine.
- /carriers.results[].safety_rating and status — Define go/no-go policy gates; log the values used for auditability on award decisions.
- /disruptions.results[].type/severity — Route to appropriate playbooks: weather buffers, re-sequencing pickups, alternate carriers, or proactive customer comms.
Data Recency, Provenance, and Appropriate Use
One advantage of consolidating logistics signals behind a single API is clarity around recency and intended use. A few reminders to ensure best fit:
- Fuel prices (/fuel-prices): Sourced from EIA; ideal for surcharge logic and long-lived contracts. Cache for a business day and combine with /historical for smoothing.
- FTL quotes (/freight-rates): Use immediately in bids. Store alongside your internal lane history to refine custom markups and acceptance likelihood models.
- Port congestion (/port-congestion): Trend-aware, lagged by ~6–7 days. Great for tender-time risk scoring and weekly planning—not a live queue metric for hour-by-hour dispatching.
- Disruptions (/disruptions): Natural hazards only. For pre-tender scans and pre-pickup risk checks, especially near ports or along sensitive corridors.
- Carrier lookups (/carriers): Ideal at award time and before assignment; automate hard stops on inactive or unsafe carriers.
Concrete JSON Walkthroughs and Interpretation
Fuel Prices: Focus on Surcharge Calculations
{
"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
}
}
}
}
}
- Use national_average if your tender permits a single benchmark; otherwise adopt region-specific values for pickup or delivery-side logic.
- change_week/change_percent help communicate deltas to customers transparently—useful in escalator clauses.
Freight Rates: Setting the Baseline
{
"success": true,
"data": {
"mode": "trucking",
"service": "FTL (53' dry van)",
"source": "Warp",
"price_usd": 7207.92,
"transit_days": 4,
"pickup_date": "2026-08-24",
"delivery_date": "2026-08-28"
}
}
- price_usd becomes your linehaul backbone. Combine with surcharge and risk multipliers for final bid.
- transit_days calibrate SLAs; tie to disruption and congestion signals before committing.
Port Congestion: Risk Scoring
{
"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
}
}
]
}
}
- ratio_vs_baseline below 1 suggests quieter-than-usual conditions; you may reduce buffers slightly (with prudence).
- As lagged data, it’s best used as a weekly steering signal rather than minute-by-minute operations.
Advanced Patterns: Caching, Retries, and Circuit Breaking
Developers scaling tender engines across thousands of lanes should adopt standard resilience patterns:
- Client-side caching: Fuel prices can be cached until the next EIA update window. Port congestion should be cached for several days per port as it’s a rolling average with lag.
- Exponential backoff with jitter: Apply on 429 and 5xx responses. Coalesce identical requests (e.g., the same /fuel-prices within a second) to avoid thundering herds.
- Circuit breakers: If an endpoint exhibits transient issues, short-circuit further calls for a cooldown period and serve cached data or degrade features (for instance, omit congestion premium rather than block tender completion).
- Deadline budgeting: Bound the time spent fetching external signals so your tender SPA or batch job returns within user or SLA expectations. Favor stale-but-useful over perfect-but-late.
Developer Ergonomics: One Schema, Many Signals
FreightPulse returns a consistent response envelope and uses predictable field names across endpoints. That consistency reduces parsing logic and helps you share code for common concerns such as:
- Success and error handling: Centralize inspection of success and error fields across all endpoints.
- Timestamp governance: Normalize timestamps to UTC and record them for audit trails on each awarded tender.
- Trend modeling: Use /historical for clean series ingestion into your analytics store, keeping uniform shapes across metrics.
Teams building internal platforms can wrap FreightPulse in domain-specific SDKs—e.g., a “PricingService” that exposes methods like getFuelSurcharge(), getLinehaul(), getCongestionFactor()—hiding REST details from UI or workflow code. This pattern accelerates onboarding new developers and simplifies cross-service reuse.
Additional Examples: Composing Multiple Endpoints
cURL: One-Liner to Compare Two Lanes’ Linehaul and Surcharge
# Lane A: 10001 -> 90210
LINEHAUL_A=$(curl -s "https://freightpulsehq.com/api/v1/freight-rates?mode=trucking&origin_zip=10001&destination_zip=90210" | jq -r '.data.price_usd')
DIESEL=$(curl -s "https://freightpulsehq.com/api/v1/fuel-prices" | jq -r '.data.data.diesel.national_average')
SURCHARGE_A=$(python3 - <<'PY'
import sys
diesel=float(sys.argv[1]); miles=2790; baseline=1.25; rate=0.04
print(round(rate*max(diesel-baseline,0)*miles,2))
PY
"$DIESEL")
# Lane B: 33101 -> 85001
LINEHAUL_B=$(curl -s "https://freightpulsehq.com/api/v1/freight-rates?mode=trucking&origin_zip=33101&destination_zip=85001" | jq -r '.data.price_usd')
SURCHARGE_B=$(python3 - <<'PY'
import sys
diesel=float(sys.argv[1]); miles=2300; baseline=1.25; rate=0.04
print(round(rate*max(diesel-baseline,0)*miles,2))
PY
"$DIESEL")
echo "Lane A total: $(python3 - <<PY
a=float("$LINEHAUL_A"); s=float("$SURCHARGE_A")
print(round(a+s,2))
PY
)"
echo "Lane B total: $(python3 - <<PY
b=float("$LINEHAUL_B"); s=float("$SURCHARGE_B")
print(round(b+s,2))
PY
)"
This quick comparison helps an operator decide where to concentrate bid efforts or margin buffers.
FAQ
How often do FreightPulse fuel prices update?
Fuel prices are sourced from EIA and exposed via a consistent JSON schema. Treat them as daily operational benchmarks and combine with /historical for rolling averages when your tender windows span multiple weeks.
Can I look up ocean carriers as well as trucking carriers?
Yes. Use /carriers with type=ocean and query by name or organization number. The same endpoint supports US trucking lookups by DOT number or name, giving you a single integration for multimodal vetting workflows.
Does the port congestion data reflect real-time vessel wait times?
No. Port congestion is an approximation based on IMF PortWatch AIS-derived trends, calculated as a 7-day average compared to a 90-day baseline and lagged by roughly 6–7 days. It’s best for trend-aware planning and tender risk scoring, not minute-by-minute dispatch decisions.
Can I filter disruption alerts to hazards near a specific port?
Yes. Use the /disruptions endpoint with the port parameter (e.g., USLAX). The query returns natural hazards within a reasonable radius, allowing you to tailor buffers and contingency steps in your bid or routing logic.
What happens if I omit required parameters on an endpoint?
You’ll receive a structured response that either provides a clear 422 error or, for certain endpoints like /freight-rates, an HTTP 200 indicating availability=false semantics. Always inspect the success flag and payload fields to guide remediation or user prompts.
Conclusion + CTA
Winning tenders and nailing spot bids demand more than speed—they demand data discipline. With FreightPulse, your engineering and operations teams gain a unified surface for the essentials: live FTL quotes, diesel benchmarks, port congestion trends, carrier verification, and natural-disruption alerts. By eliminating vendor sprawl and unifying schemas, you can ship a quoting pipeline that’s faster, more accurate, and easier to govern.
Whether you’re a 3PL streamlining RFP responses, a forwarder pairing ocean intelligence with drayage schedules, or a shipper building a pricing copilot into your TMS, FreightPulse is the shortest path from idea to production-grade logistics intelligence. Replace brittle spreadsheets and scattered feeds with a single, reliable API and put your team’s energy into decisions, not data plumbing.
Build your next tender automation right now. Explore endpoints, run real requests, and connect the dots into a quoting engine your operators trust. FreightPulse is ready when you are—start exploring today: Try FreightPulse for free.