Recompete Watchlist
The Recompete Watchlist: federal contracts in a market entering their recompete window, each row carrying the bid/no-bid facts (incumbent, value, end dates and option runway, contestability, incumbent-stress signals, named subcontractors) plus a market-level feed of live sources-sought and pre-solicitation notices with the contracting officer's contact. Composed from prime_awards (FPDS) + exclusions + subawards + opportunities. Factual only; no win score. Full guide: /recompete-watchlist.
Parameters
A market filter (naics or agency) is required. Unknown parameters return 400.
naics: exactly 6 digits.agency: awarding agency name substring, case-insensitive.set_aside: set-aside type substring (e.g.veteran,8(a),women).state: 2-letter place-of-performance state code.amount_min/amount_max: bounds on current contract value (USD).0is honored. Acceptsvalue_min/value_maxas aliases.ends_after_months/ends_within_months: the recompete window floor and ceiling, in months from today (default 0 and 18). Setends_after_months=6to skip contracts too close to influence.date_anchor:current_end(next decision point, default) orpotential_end(guaranteed final end, all options used).options_exhausted_only:truenarrows to the high-confidence must-recompete subset;options_window_days(default 90) sets the threshold.early_signal_days/early_signal_types: lookback in days (default 180) and notice types for the early-signal feed. Type aliases includesources_sought,rfi,presolicitation,special_notice,industry_day,solicitation,justification.incumbent_excluded:truenarrows to recompetes whose incumbent is currently on the SAM exclusions list (can't legally win the recompete);falseto recompetes whose incumbent is clean. Omit for both.sort_by:ends_soonest(default),value,mod_churn,de_obligated.limit: Results per page. Default 100, maximum 1,000. Over the maximum returns402.offset: pagination offset.
Response
Standard list envelope plus a top-level early_signals block. Each row in data carries incumbent / incumbent_uei, agency / sub_agency / agency_code / sub_agency_code / awarding_office (published names plus their stable CGAC-family codes), naics / psc / set_aside, the timing fields (current_end_date, potential_end_date, option_runway_days, months_until_end), current_value, the contestability pair extent_competed + offers_last_cycle (which is null when no competition was recorded, never coerced), the incumbent-stress signals de_obligated / mod_churn / incumbent_excluded, the vehicle fields is_task_order / parent_award_id_piid, and subcontractors (the incumbent's named subs from FFATA, often empty). early_signals lists live sources-sought and pre-solicitation notices in the market, each with the CO name, email, and response deadline. _sources is ["usaspending_fpds", "sam_exclusions", "usaspending_ffata", "sam_opportunities"].
{
"agency": "Department of Veterans Affairs",
"sub_agency": "Department of Veterans Affairs",
"agency_code": "036",
"sub_agency_code": "3600",
"awarding_office": "TECHNOLOGY ACQUISITION CENTER NJ (36C10B)",
"incumbent_excluded": false
}
Single recompete detail: GET /api/v1/recompetes/{piid}
Fetch one recompeting contract by its PIID for a flat object with two blocks:
recompete: the full row shape of adatarow above (incumbent, timing includingoption_runway_daysandmonths_until_end, contestability, value,de_obligated/mod_churn/incumbent_excluded, vehicle fields, and the incumbent's namedsubcontractors).vulnerability: an incumbent-vulnerability block,{ "count": N, "reasons": [...] }, composed from the incumbent's SBA-registered certifications and FPDS obligation history. Each reason is a fact carrying its own evidence text, never a score; an emptyreasonsmeans no signal fired, not "safe". Reason codes:cert_lapse: the incumbent's SBA-registered certification for this contract's set-aside program expires before the contract's current end date, so they may be ineligible to recompete under the same set-aside. Fires only when a matching, dated certification exists (absence is not treated as a signal).lone_holder: the incumbent holds only a small number of distinct federal prime contracts on record (thin past performance).single_agency: the incumbent's federal obligations concentrate in a single top-level department; the reason text states whether that department is the one running this recompete (entrenchment) or a different one (thin roots with the actual buyer), and the reason carriessame_department_as_recompete(bool).
_sources is ["usaspending_fpds", "sba_dsbs", "sam_exclusions"]. An unknown PIID returns 404; the endpoint is Pro (402 otherwise). It is an ID lookup, so it is never windowed.
Example
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://govconapi.com/api/v1/recompetes?naics=541512&agency=veterans&set_aside=veteran&ends_after_months=6&ends_within_months=18&amount_max=25000000&sort_by=ends_soonest"
# one recompeting contract + the incumbent-vulnerability block
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://govconapi.com/api/v1/recompetes/{piid}"
Errors
- 400: no market filter (
naicsoragencyrequired), or a market too broad to evaluate in time (addnaics). - 402: the Recompete Watchlist requires Pro.
- 429: rate limit exceeded.