Skip to main content
POST
Government Solicitations
Which federal agencies are buying what you sell, right now? A Sources Sought or Presolicitation notice is SAM.gov’s signal that an agency has a requirement and is still writing it — before it hits a formal solicitation, before a prime has been picked, while the contracting officer is actively looking for vendors to talk to. That window is the buying window: respond to a Sources Sought and you can shape the requirement; wait for the full solicitation and you’re competing on someone else’s terms. Every notice carries the contracting officer’s published name, email, and phone — the join a normal B2B database can’t make, because “the federal government” isn’t a company record. This is a lead-generation endpoint for selling to government, not a general contract-research tool: it filters to the early, relationship-building notice types (r/p) by default, and every row’s point of contact is real and reachable. Async, like every research endpoint on this site: you POST a request, get back a request_id, and poll GET /v1/requests/{request_id} with X-Agent-ID (your wallet) until the job completes — without the wallet header the poll returns 401 missing_wallet.
This endpoint accepts optional memo (≤ 1000 chars) and decisionContext (object) body fields. Stored on the receipt for debugging and audit — see Audit Trail.

Request

POST /v1/tools/gov/solicitations
string[]
required
One or more 6-digit NAICS codes (1–20), e.g. ["541511"]. Every code must match ^\d{6}$. See NAICS codes to start from below.
string[]
default:"['r', 'p']"
SAM.gov procurement type codes to include (1–9): r Sources Sought, p Presolicitation, o Solicitation, k Combined Synopsis/Solicitation, s Special Notice, a Award Notice, u Justification, i Intent to Bundle, g Surplus Property. The default keeps you in the buying window — before the requirement has hardened into a formal solicitation.
number
default:"30"
Look-back window on posted date, 1–365.
string[]
Case-insensitive substrings matched against the agency path (max 20), e.g. ["DEPT OF THE ARMY"].
string[]
Title / full-text keywords (max 20).
string
Two-letter place-of-performance state code, e.g. "TX". Rows with no recorded place of performance are unknown, not a match, and are excluded when this filter is set.
string
Set-aside code: SBA, 8A, HZC, SDVOSBC, WOSB, …
boolean
default:"true"
Drop archived notices and notices whose response deadline has already passed.
boolean
default:"false"
true keeps only notices whose point of contact has both a name and an email — the rows you can actually act on.
boolean
default:"true"
Fetch description bodies for the first rows of the result. See description cap below.
number
default:"100"
Max results, 1–500.
The x402 middleware reads payment-signature (or legacy x-payment). The SDK sets this for you — pass the signed payment when calling HTTP directly.

Response

Zero rows is a completed job, not an error — results: [], total_found: 0. It means no notice matched your filters in the window, not that the search failed. The same contract as every other search endpoint on this site.
data_as_of is an ISO timestamp of the data snapshot behind results: the publish time of SAM.gov’s daily extract when served from it (same-day postings typically appear the next morning), or the request time when the live SAM.gov API answered.

The description cap

Description bodies are a second upstream call per notice, so they’re fetched for a capped number of rows per search rather than every row unconditionally. description is null on any row the fetch didn’t reach. truncated: true on the top-level result means either the description cap stopped some rows short, or the search itself was halted early by an upstream error — check description_fetches and inspect which rows have description: null to tell which happened. description_truncated (per row) is different: it means the description body itself was longer than the per-notice character cap and was cut, not that it’s missing.

has_contact

Not every notice publishes a point of contact — pass has_contact: true to only get rows with a name and an email you can act on immediately. Without it you’ll see notices where contact is null.

NAICS codes to start from

NAICS codes are hierarchical — 5415 (computer systems design) rolls up 541511541519, but this endpoint only accepts full 6-digit codes. Pass the code(s) closest to what you actually deliver; SAM.gov’s own NAICS lookup (naics.com or sam.gov) is the canonical reference for less common verticals.

SDK

See Pricing for costs.