Developers

API, MCP tool & webhooks

Three ways to consume recompete predictions: a JSON API, an MCP tool your agents call directly, and webhook push on a watchlist.

REST API

Auth with ?key= or x-api-key header. Anonymous = free tier (summary sample).

# Expiring recompetes + predicted winners in a NAICS
curl "https://recompete.dropwatchhq.com/api/recompetes?naics=541330&minDays=90&maxDays=180"

# Predict the winner of one expiring contract (best: pass the award gid)
curl "https://recompete.dropwatchhq.com/api/predict?gid=CONT_AWD_..."

# Or predict from NAICS + incumbent
curl "https://recompete.dropwatchhq.com/api/predict?naics=541512&incumbent=LEIDOS"

# The competitor field for a lane
curl "https://recompete.dropwatchhq.com/api/competitors?naics=541330"

MCP — predict_recompete

Point your agent (Claude, etc.) at https://recompete.dropwatchhq.com/mcp (streamable-HTTP JSON-RPC 2.0). Tools: predict_recompete, expiring_recompetes, lane_competitors.

curl -X POST "https://recompete.dropwatchhq.com/mcp" -H "content-type: application/json" -d '{
  "jsonrpc":"2.0","id":1,"method":"tools/call",
  "params":{"name":"predict_recompete","arguments":{"naics":"541330","incumbent":"LEIDOS"}}
}'

Response shape

{
  "contract": { "recipient": "...", "naics": "541330", "agency": "...", "end": "2026-12-31" },
  "prediction": {
    "predictedWinner": "...", "confidence": "high|medium|low",
    "incumbentRate": 0.66, "incumbentRateAdjustments": ["..."],
    "candidates": [ { "recipient":"...", "role":"incumbent", "probability":0.66, "n":5, "basis":"..." }, ... ],
    "baseRate": { "central":0.62, "band":[0.55,0.78], "source":"..." },
    "laneSample": { "totalAwards": 40, "distinctWinners": 22 },
    "disclaimer": "Probabilistic estimate from public USAspending data — not insider info."
  }
}
Every prediction ships with the base rate, the adjustments applied, sample size n, and a confidence band. We do not fake precision.

Get an API key →