Home → Blog

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:

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:

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:

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:

Notes:

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:

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:

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:

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:

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:

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:

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:

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:

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:

End-to-End Tender Automation Flow

Bringing these endpoints together enables a systematic tendering and spot bid engine:

  1. Pull a real-time linehaul reference for your lane via /freight-rates. Capture transit_days and delivery_date for a baseline schedule.
  2. Compute a lane-aware fuel surcharge from /fuel-prices (national or region) and incorporate your surcharge table rules. Optionally, include historical smoothing from /historical.
  3. 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.
  4. Query /disruptions for known hazards along key segments or near ports. If results exceed your severity threshold, adjust buffers or flag for human review.
  5. 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:

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:

Performance guidance:

Field-by-Field: Practical Interpretations

Across endpoints, a few fields are especially important for pricing, SLA commitments, and risk modeling:

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:

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
}
}
}
}
}

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"
}
}

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
}
}
]
}
}

Advanced Patterns: Caching, Retries, and Circuit Breaking

Developers scaling tender engines across thousands of lanes should adopt standard resilience patterns:

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:

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.