Markup + Win Probability

The highest-leverage pricing endpoint. Give it a lane and a proposed rate — get back win probability at that exact rate, a suggested sweet-spot rate derived from your historical wins, the full rate distribution, and a plain-English verdict ready to drop into your UI.

GET /api/integrations/insights/markup

What you get back

A single call gives you everything to either display pricing guidance to an operator or auto-decide whether a rate should be quoted. Example response for Atlanta → Dallas dry van at $2,350:

{
  "found": true,
  "query": {
    "origin": "Atlanta, GA",
    "destination": "Dallas, TX",
    "equipment": "V",
    "proposed_rate": 2350.00,
    "dat_rate": 2050.00
  },
  "win_probability": 0.72,
  "confidence": "high",
  "markup_pct": 14.6,
  "suggested_rate": 2280.00,
  "rate_band": {
    "floor": 1850.00,
    "median": 2150.00,
    "ceiling": 2500.00
  },
  "verdict": "Strong lane — proposed rate of $2,350 is 14.6% over DAT, above historical median of $2,150. 72% win probability. Likely to win."
}

Three ways to use this

1. Inline display: show verdict as live tooltip text next to the rate input. Updates as the operator types.

2. Win probability gauge: render win_probability as a colored bar or percentage. Green above 0.6, yellow 0.35-0.6, red below.

3. Auto-decision: for bulk quoting, only send quotes where confidence == "high" and win_probability >= 0.5. Skip the rest or route to a human.

Query parameters

ParameterTypeDescription
originstring (required)Pickup city + state, e.g. Atlanta, GA.
destinationstring (required)Delivery city + state, e.g. Dallas, TX.
equipmentstring (optional)Equipment type code, e.g. V. If omitted, all equipment types on the lane are used.
proposed_ratenumber (required)The rate in USD you're considering quoting. Must be greater than 0. Win probability is computed against this value.
dat_ratenumber (optional)DAT market rate for reference. If provided, markup_pct is computed vs this. If omitted, WardenIQ uses its derived historical median as the reference.

Response field reference

win_probability

Estimated probability (0.0 to 1.0) that the proposed rate would win on this lane. Computed by counting historical wins at comparable or lower rates vs total decided quotes. If the proposed rate is above the historical ceiling, this returns a pessimistic floor estimate.

confidence

markup_pct

Markup percentage calculated as (proposed_rate − reference) / reference × 100. The reference is dat_rate if you supplied one, else WardenIQ's derived historical median. Rounded to 1 decimal place.

suggested_rate

The sweet-spot rate WardenIQ recommends. Derived from your historical winning markups — specifically, the average of winning rates with a slight cushion below the lowest losing rate. May be higher or lower than proposed_rate.

rate_band

Floor / median / ceiling of rates actually quoted on this lane historically. Use this to show the operator visually where their proposed rate sits in the distribution — a sparkline or horizontal bar works well.

verdict

Plain-English recommendation ready to display. Combines all the above into one sentence so you can wire it up in minutes without writing conditional logic.

curl example

curl "https://wardeniq.com/api/integrations/insights/markup?origin=Atlanta,%20GA&destination=Dallas,%20TX&equipment=V&proposed_rate=2350&dat_rate=2050" \
  -H "Authorization: Bearer YOUR_SERVICE_TOKEN"

Read endpoint — service token only, no HMAC signing required.

No-data response

{
  "found": false,
  "query": {
    "origin": "Albuquerque, NM",
    "destination": "Helena, MT",
    "equipment": "F",
    "proposed_rate": 3500.00,
    "dat_rate": null
  },
  "confidence": "none"
}

Handle found: false gracefully in your UI. Don't show a fake win probability when there's no data to back it.

Use cases

Rate limit

10 requests per second per tenant. For inline rate coaching that debounces on every keystroke, implement client-side debouncing (300-500ms) and cache per (origin, destination, equipment, rate) for 5 minutes.