Endpoints
/v1/sam/recompetes
https://secfeedapi.com/v1/sam/recompetesRecompete radar (paid plans): contracts and IDVs whose period of performance ends soon, with the incumbent, value, agency, NAICS, set-aside, offers received and linked SAM.gov notices. Default window: ending 6 to 18 months from today.
| Parameter | Type | Description | Example |
|---|---|---|---|
endFrom | string | Ends on or after, YYYY-MM-DD. The radar holds contracts ending from today to 24 months out. Default 6 months from today. | 2027-01-01 |
endTo | string | Ends on or before, YYYY-MM-DD. Default 18 months from today. | 2027-12-31 |
naics | string | Six digits for one code, fewer digits for every code under that prefix. | 5415 |
setAside | string | Comma separated set-aside codes as USAspending writes them, such as SBA, 8A, 8AN, SDVOSBC, WOSB, HZC. | SBA |
noSetAside | string | true for contracts that were not set aside last time. | true |
state | string | Comma separated place of performance state codes. | VA,MD |
psc | string | Comma separated product or service codes. | DA01 |
kind | string | contract or idv. | idv |
agency | string | Awarding agency name contains this text. | Veterans |
subAgency | string | Awarding sub-agency name contains this text. | Army |
incumbent | string | Incumbent name contains this text. | booz allen |
incumbentUei | string | Incumbent UEI, or its parent's UEI to cover every subsidiary. | |
q | string | Award description contains this text. | cybersecurity |
minValue | number | Potential value (current value when there is none) at least this many dollars. | 10000000 |
maxValue | number | Potential value at most this many dollars. | |
maxOffers | integer | At most this many offers received last time; 1 finds sole source and single bid awards. | 1 |
hasNotice | string | true for contracts named by a forward looking SAM.gov notice (signal links). | true |
firstSeenFrom | string | Only contracts that entered the radar on or after this date or firstSeen value. | |
sort | string | endDate (soonest first), value (largest first) or firstSeen (newest on the radar first). Default endDate. | |
from | integer | Offset for paging. Default 0. | |
size | integer | Rows per page, 1 to 100. Default 20. |
- The default window is contracts ending 6 to 18 months from today; pass endFrom and endTo to change it.
- endDate is the potential end date for contracts (all options exercised) and the last date to order for IDVs.
- Each row lists up to 10 related notices, forward looking ones first; relatedNoticesTotal has the full count.
- Trial and free keys get a 402 with the number of matching contracts.
/v1/sam/recompete
https://secfeedapi.com/v1/sam/recompeteOne contract on the recompete radar by awardKey or PIID, with its incumbent's SAM.gov registration and linked notices (paid plans).
| Parameter | Type | Description | Example |
|---|---|---|---|
awardKeyrequired | string | awardKey from a search, or a PIID with or without dashes. | 36C25021P1699 |
- A PIID that several contracts share returns the one ending first; use awardKey to be exact.
/v1/sam/recompete-alerts
https://secfeedapi.com/v1/sam/recompete-alertsYour saved recompete alerts.
| Parameter | Type | Description | Example |
|---|---|---|---|
urlrequired | string | Your https webhook. | https://example.com/hooks/recompetes |
filters | object | Any of naics, setAside, noSetAside, state, psc, kind, agency, subAgency, incumbent, incumbentUei, q, minValue, maxValue, maxOffers, endFrom, endTo. | {"naics": "5415", "setAside": "SBA"} |
- Two events: entered_window when a contract matching the filters joins the radar in the weekly load, and notice_linked when a new SAM.gov notice names one (daily).
- Each POST carries up to 100 contracts; up to 1,000 a run and 25 alerts per key.
- GET /v1/sam/recompete-alerts lists yours; POST /v1/sam/recompete-alerts/delete with {"id": n} removes one.
Request examples
Every response below is real output from the API, trimmed to the first records.
Small business IT contracts ending in 6 to 18 months
Every code under NAICS 5415 that was a total small business set-aside, soonest end first. Check incumbent.samRegistration for the holder's status.
curl -H "Authorization: Bearer $SECFEED_KEY" \ "https://secfeedapi.com/v1/sam/recompetes?naics=5415&setAside=SBA&size=2"
import os, requests
r = requests.get(
"https://secfeedapi.com/v1/sam/recompetes",
params={'naics': '5415', 'setAside': 'SBA', 'size': '2'},
headers={"Authorization": f"Bearer {os.environ['SECFEED_KEY']}"},
timeout=60,
)
r.raise_for_status()
print(r.json()){
"total": 1046,
"window": {
"endFrom": "2027-04-28",
"endTo": "2028-04-28"
},
"recompetes": [
{
"awardKey": "CONT_AWD_75N98125F00001_7529_HHSN316201500050W_7529",
"piid": "75N98125F00001",
"parentPiid": "HHSN316201500050W",
"kind": "contract",
"awardType": "DELIVERY ORDER",
"description": "THIS IS A FIRM FIXED PRICE DELIVERY ORDER FOR QUANTITY (16) EACH ORACLE DATABASE ENTERPRISE EDITION, ORACLE PARTITIONING, AND ORACLE WEBLOGIC SERVER STANDARD EDITION PROCESSOR LICENSES PLUS MAINTENANCE, UPDATES AND TECHNICAL SUPPORT FOR EXISTING DECA",
"agency": "Department of Health and Human Services",
"subAgency": "National Institutes of Health",
"office": "NIH NITAA DITA-DVI OF INFO TECH ACQ",
"naics": {
"code": "541519",
"description": "OTHER COMPUTER RELATED SERVICES"
},
"psc": {
"code": "DA10",
"description": "IT AND TELECOM - BUSINESS APPLICATION/APPLICATION DEVELOPMENT SOFTWARE AS A SERVICE"
},
"setAside": {
"code": "SBA",
"description": "SMALL BUSINESS SET ASIDE - TOTAL"
},
"extentCompeted": "FULL AND OPEN COMPETITION",
"offersReceived": 2,
"solicitationId": "CS-120007-SB",
"value": {
"obligated": 584236.8,
"current": 584236.8,
"potential": 876355.2
},
"period": {
"start": "2025-04-07",
"currentEnd": "2027-04-28",
"potentialEnd": "2027-04-28",
"orderingEnd": null
},
"endDate": "2027-04-28",
"monthsLeft": 5.9,
"optionsRemaining": false,
"incumbent": {
"name": "AFFIGENT, LLC",
"uei": "M46UYYHVH4B1",
"parentName": "NANA REGIONAL CORPORATION, INC.",
"parentUei": "QGSQK26MBMR6",
"secCompany": null,
"samRegistration": {
"status": "active",
"expirationDate": "2027-08-24",
"sbaCertifications": [],
"expiresBeforeContractEnd": false
}
},
"placeOfPerformanceState": "VA",
...Contracts a new SAM.gov notice already names
The largest contracts that a sources sought, justification or follow-on notice has cited; relatedNotices shows each one with signal true.
curl -H "Authorization: Bearer $SECFEED_KEY" \ "https://secfeedapi.com/v1/sam/recompetes?hasNotice=true&sort=value&size=2"
import os, requests
r = requests.get(
"https://secfeedapi.com/v1/sam/recompetes",
params={'hasNotice': 'true', 'sort': 'value', 'size': '2'},
headers={"Authorization": f"Bearer {os.environ['SECFEED_KEY']}"},
timeout=60,
)
r.raise_for_status()
print(r.json()){
"total": 107,
"window": {
"endFrom": "2027-04-28",
"endTo": "2028-04-28"
},
"recompetes": [
{
"awardKey": "CONT_AWD_70CDCR26C00000021_7012_-NONE-_-NONE-",
"piid": "70CDCR26C00000021",
"parentPiid": null,
"kind": "contract",
"awardType": "DEFINITIVE CONTRACT",
"description": "GOVERNMENT FURNISHED AIRCRAFT (GFA) OPERATIONAL SUPPORT FOR AIRCRAFT AND MAINTENANCE SERVICES (OSAMS)",
"agency": "Department of Homeland Security",
"subAgency": "U.S. Immigration and Customs Enforcement",
"office": "DETENTION COMPLIANCE AND REMOVALS",
"naics": {
"code": "481211",
"description": "NONSCHEDULED CHARTERED PASSENGER AIR TRANSPORTATION"
},
"psc": {
"code": "V211",
"description": "TRANSPORTATION/TRAVEL/RELOCATION- TRAVEL/LODGING/RECRUITMENT: AIR PASSENGER"
},
"setAside": {
"code": "NONE",
"description": "NO SET ASIDE USED."
},
"extentCompeted": "NOT COMPETED",
"offersReceived": 1,
"solicitationId": "70CDCR26R00000022",
"value": {
"obligated": 249385561.5,
"current": 249385561.5,
"potential": 379979044.5
},
"period": {
"start": "2026-08-12",
"currentEnd": "2027-08-11",
"potentialEnd": "2028-02-11",
"orderingEnd": null
},
"endDate": "2028-02-11",
"monthsLeft": 15.4,
"optionsRemaining": true,
"incumbent": {
"name": "EASTERN AIR EXPRESS LLC",
"uei": "QKELA8U9HRQ1",
"parentName": "EASTERN AIR EXPRESS LLC",
"parentUei": "QKELA8U9HRQ1",
"secCompany": null,
"samRegistration": {
"status": "active",
"expirationDate": "2026-11-19",
"sbaCertifications": [],
"expiresBeforeContractEnd": true
}
},
"placeOfPerformanceState": "MO",
...Single bid awards over $10 million
Contracts that drew one offer last time: the incumbent faced no competitor, so a credible second bid matters.
curl -H "Authorization: Bearer $SECFEED_KEY" \ "https://secfeedapi.com/v1/sam/recompetes?maxOffers=1&minValue=10000000&size=2"
import os, requests
r = requests.get(
"https://secfeedapi.com/v1/sam/recompetes",
params={'maxOffers': '1', 'minValue': '10000000', 'size': '2'},
headers={"Authorization": f"Bearer {os.environ['SECFEED_KEY']}"},
timeout=60,
)
r.raise_for_status()
print(r.json()){
"total": 2156,
"window": {
"endFrom": "2027-04-28",
"endTo": "2028-04-28"
},
"recompetes": [
{
"awardKey": "CONT_AWD_1605TB22F00040_1605_GS35F0503M_4730",
"piid": "1605TB22F00040",
"parentPiid": "GS35F0503M",
"kind": "contract",
"awardType": "DELIVERY ORDER",
"description": "T-MOBILE USA WIRELESS TASK ORDER",
"agency": "Department of Labor",
"subAgency": "Office of the Assistant Secretary for Administration and Management",
"office": "DOL-ITAS DIVISION B PROCUREMENT",
"naics": {
"code": "334220",
"description": "RADIO AND TELEVISION BROADCASTING AND WIRELESS COMMUNICATIONS EQUIPMENT MANUFACTURING"
},
"psc": {
"code": "DE02",
"description": "IT AND TELECOM - MOBILE DEVICE SUPPORT SERVICES (LABOR)"
},
"setAside": null,
"extentCompeted": "FULL AND OPEN COMPETITION",
"offersReceived": 1,
"solicitationId": "1605TB-22-Q-00023",
"value": {
"obligated": 2606387.02,
"current": 27372083.23,
"potential": 27372083.23
},
"period": {
"start": "2022-04-25",
"currentEnd": "2027-04-28",
"potentialEnd": "2027-04-28",
"orderingEnd": null
},
"endDate": "2027-04-28",
"monthsLeft": 5.9,
"optionsRemaining": false,
"incumbent": {
"name": "T-MOBILE USA, INC.",
"uei": "ZVW2T2CCG7V9",
"parentName": "T-MOBILE USA, INC.",
"parentUei": "ZVW2T2CCG7V9",
"secCompany": null,
"samRegistration": {
"status": "active",
"expirationDate": "2027-05-19",
"sbaCertifications": [],
"expiresBeforeContractEnd": false
}
},
"placeOfPerformanceState": "DC",
"firstSeen": "2026-10-29T08:01:38Z",
"relatedNotices": [],
"relatedNoticesTotal": 0,
...Response fields
| Field | Type | Meaning |
|---|---|---|
total | integer | Contracts matching the filters. |
window.endFrom, window.endTo | string | The end date window used. |
recompetes[].awardKey | string | USAspending's unique award key; use it with /v1/sam/recompete. |
recompetes[].piid, parentPiid | string | The contract number and, for orders, the parent vehicle. |
recompetes[].kind, awardType | string | contract or idv, and the award type such as DEFINITIVE CONTRACT or DELIVERY ORDER. |
recompetes[].description | string | The award description from the base transaction. |
recompetes[].agency, subAgency, office | string | Awarding agency, sub-agency and contracting office. |
recompetes[].naics, psc | object | code and description of the industry and the product or service. |
recompetes[].setAside | object | code and description of the set-aside used last time, or null. |
recompetes[].extentCompeted, offersReceived | string, integer | How the award was competed and how many offers came in. |
recompetes[].solicitationId | string | The solicitation the award came from. |
recompetes[].value.obligated, current, potential | number | Dollars obligated so far, current value and potential value with every option. |
recompetes[].period.start, currentEnd, potentialEnd, orderingEnd | string | Period of performance dates and, for IDVs, the last date to order. |
recompetes[].endDate, monthsLeft | string, number | The end used by the radar and the months left until it. |
recompetes[].optionsRemaining | boolean | true when the potential end is later than the current end. |
recompetes[].incumbent.name, uei, parentName, parentUei | string | The current holder and its parent. |
recompetes[].incumbent.secCompany | object | cik, ticker and name when the holder or its parent is a listed company, else null. |
recompetes[].incumbent.samRegistration | object | status, expirationDate, sbaCertifications[] and expiresBeforeContractEnd from SAM.gov, or null when not registered. |
recompetes[].placeOfPerformanceState | string | Where the work is done. |
recompetes[].firstSeen | string | When the contract entered the radar. |
recompetes[].relatedNotices[] | array | noticeId, title, type, posted, responseDeadline, solicitationNumber, setAsideCode, matchedOn, signal, linked, samUrl. |
recompetes[].relatedNoticesTotal | integer | All linked notices, including those past the 10 shown. |
recompetes[].usaspendingUrl | string | The award on USAspending.gov. |
source.loadedAt | string | When the weekly load ran. |
matchedOn values
| Value | Meaning |
|---|---|
| piid_in_text | The notice's title or description names the contract number (follow-ons, sources sought, bridges). |
| contract_number | The notice's award or solicitation number is the contract number; on a justification this usually means an extension or sole source. |
| original_solicitation | The notice is the solicitation the award came from. History, not a signal. |
Common set-aside codes
| Code | Meaning |
|---|---|
| SBA | Total small business set-aside |
| 8A | 8(a) competitive |
| 8AN | 8(a) sole source |
| SDVOSBC | Service-disabled veteran-owned small business set-aside |
| WOSB | Women-owned small business set-aside |
| HZC | HUBZone set-aside |
| NONE | No set-aside |
How to
How do I change the window?
Pass endFrom and endTo. The radar holds contracts ending from today to 24 months out.
curl -H "Authorization: Bearer $SECFEED_KEY" \ "https://secfeedapi.com/v1/sam/recompetes?endFrom=2027-01-01&endTo=2027-03-31&size=2"
How do I find contracts a particular company holds?
Search incumbent by name, or pass the parent's UEI in incumbentUei to cover every subsidiary.
curl -H "Authorization: Bearer $SECFEED_KEY" \ "https://secfeedapi.com/v1/sam/recompetes?incumbent=leidos&size=2"
How do I find contracts that were not set aside?
Pass noSetAside=true. These are full and open competitions where a small business set-aside could still be argued for.
curl -H "Authorization: Bearer $SECFEED_KEY" \ "https://secfeedapi.com/v1/sam/recompetes?noSetAside=true&naics=541512&size=2"
How do I find 8(a) sole source contracts ending soon?
Filter setAside=8AN and check whether the incumbent's 8(a) certification exit date falls before the end.
curl -H "Authorization: Bearer $SECFEED_KEY" \ "https://secfeedapi.com/v1/sam/recompetes?setAside=8AN&size=2"
How do I cover one agency?
agency matches part of the awarding agency name; subAgency narrows to a component.
curl -H "Authorization: Bearer $SECFEED_KEY" \ "https://secfeedapi.com/v1/sam/recompetes?agency=Veterans&size=2"
How do I get the biggest contracts first?
sort=value orders by potential value, largest first.
curl -H "Authorization: Bearer $SECFEED_KEY" \ "https://secfeedapi.com/v1/sam/recompetes?sort=value&size=2"
How do I look up one contract by its number?
Pass the PIID as awardKey, with or without dashes.
curl -H "Authorization: Bearer $SECFEED_KEY" \ "https://secfeedapi.com/v1/sam/recompete?awardKey=36C25021P1699"
How do I see only IDVs?
kind=idv returns indefinite delivery vehicles, which end at their last date to order.
curl -H "Authorization: Bearer $SECFEED_KEY" \ "https://secfeedapi.com/v1/sam/recompetes?kind=idv&sort=value&size=2"
How do I see what joined the radar this week?
Pass firstSeenFrom with a date, or sort=firstSeen.
curl -H "Authorization: Bearer $SECFEED_KEY" \ "https://secfeedapi.com/v1/sam/recompetes?sort=firstSeen&size=2"
How do I get alerts?
POST /v1/sam/recompete-alerts with your https url and filters. New contracts arrive each Sunday and newly linked notices each morning.
curl -H "Authorization: Bearer $SECFEED_KEY" \ "https://secfeedapi.com/v1/sam/recompete-alerts"
Errors
- 402 for trial and free keys, with the number of contracts that match.
- 400 when endFrom or endTo is not YYYY-MM-DD or sort is unknown.
- 404 from /v1/sam/recompete when no contract on the radar has that awardKey or PIID.
See also the error codes every endpoint shares.
Try it with your own key
Free key, no card needed.