Federal Solicitations
curl --request POST \
--url https://win.oneshotagent.com/v1/tools/find/record-solicitations \
--header 'Content-Type: application/json' \
--data '
{
"naics": [
"<string>"
],
"notice_types": [
"<string>"
],
"since_days": 123,
"agencies": [
"<string>"
],
"keywords": [
"<string>"
],
"state": "<string>",
"set_aside": "<string>",
"active_only": true,
"has_contact": true,
"include_description": true,
"limit": 123
}
'import requests
url = "https://win.oneshotagent.com/v1/tools/find/record-solicitations"
payload = {
"naics": ["<string>"],
"notice_types": ["<string>"],
"since_days": 123,
"agencies": ["<string>"],
"keywords": ["<string>"],
"state": "<string>",
"set_aside": "<string>",
"active_only": True,
"has_contact": True,
"include_description": True,
"limit": 123
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
naics: ['<string>'],
notice_types: ['<string>'],
since_days: 123,
agencies: ['<string>'],
keywords: ['<string>'],
state: '<string>',
set_aside: '<string>',
active_only: true,
has_contact: true,
include_description: true,
limit: 123
})
};
fetch('https://win.oneshotagent.com/v1/tools/find/record-solicitations', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://win.oneshotagent.com/v1/tools/find/record-solicitations",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'naics' => [
'<string>'
],
'notice_types' => [
'<string>'
],
'since_days' => 123,
'agencies' => [
'<string>'
],
'keywords' => [
'<string>'
],
'state' => '<string>',
'set_aside' => '<string>',
'active_only' => true,
'has_contact' => true,
'include_description' => true,
'limit' => 123
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://win.oneshotagent.com/v1/tools/find/record-solicitations"
payload := strings.NewReader("{\n \"naics\": [\n \"<string>\"\n ],\n \"notice_types\": [\n \"<string>\"\n ],\n \"since_days\": 123,\n \"agencies\": [\n \"<string>\"\n ],\n \"keywords\": [\n \"<string>\"\n ],\n \"state\": \"<string>\",\n \"set_aside\": \"<string>\",\n \"active_only\": true,\n \"has_contact\": true,\n \"include_description\": true,\n \"limit\": 123\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://win.oneshotagent.com/v1/tools/find/record-solicitations")
.header("Content-Type", "application/json")
.body("{\n \"naics\": [\n \"<string>\"\n ],\n \"notice_types\": [\n \"<string>\"\n ],\n \"since_days\": 123,\n \"agencies\": [\n \"<string>\"\n ],\n \"keywords\": [\n \"<string>\"\n ],\n \"state\": \"<string>\",\n \"set_aside\": \"<string>\",\n \"active_only\": true,\n \"has_contact\": true,\n \"include_description\": true,\n \"limit\": 123\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://win.oneshotagent.com/v1/tools/find/record-solicitations")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"naics\": [\n \"<string>\"\n ],\n \"notice_types\": [\n \"<string>\"\n ],\n \"since_days\": 123,\n \"agencies\": [\n \"<string>\"\n ],\n \"keywords\": [\n \"<string>\"\n ],\n \"state\": \"<string>\",\n \"set_aside\": \"<string>\",\n \"active_only\": true,\n \"has_contact\": true,\n \"include_description\": true,\n \"limit\": 123\n}"
response = http.request(request)
puts response.read_bodyGovernment & legal
Federal Solicitations
Federal contract opportunities (SAM.gov) by NAICS code, with the contracting officer’s published contact.
POST
/
v1
/
tools
/
find
/
record-solicitations
Federal Solicitations
curl --request POST \
--url https://win.oneshotagent.com/v1/tools/find/record-solicitations \
--header 'Content-Type: application/json' \
--data '
{
"naics": [
"<string>"
],
"notice_types": [
"<string>"
],
"since_days": 123,
"agencies": [
"<string>"
],
"keywords": [
"<string>"
],
"state": "<string>",
"set_aside": "<string>",
"active_only": true,
"has_contact": true,
"include_description": true,
"limit": 123
}
'import requests
url = "https://win.oneshotagent.com/v1/tools/find/record-solicitations"
payload = {
"naics": ["<string>"],
"notice_types": ["<string>"],
"since_days": 123,
"agencies": ["<string>"],
"keywords": ["<string>"],
"state": "<string>",
"set_aside": "<string>",
"active_only": True,
"has_contact": True,
"include_description": True,
"limit": 123
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
naics: ['<string>'],
notice_types: ['<string>'],
since_days: 123,
agencies: ['<string>'],
keywords: ['<string>'],
state: '<string>',
set_aside: '<string>',
active_only: true,
has_contact: true,
include_description: true,
limit: 123
})
};
fetch('https://win.oneshotagent.com/v1/tools/find/record-solicitations', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://win.oneshotagent.com/v1/tools/find/record-solicitations",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'naics' => [
'<string>'
],
'notice_types' => [
'<string>'
],
'since_days' => 123,
'agencies' => [
'<string>'
],
'keywords' => [
'<string>'
],
'state' => '<string>',
'set_aside' => '<string>',
'active_only' => true,
'has_contact' => true,
'include_description' => true,
'limit' => 123
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://win.oneshotagent.com/v1/tools/find/record-solicitations"
payload := strings.NewReader("{\n \"naics\": [\n \"<string>\"\n ],\n \"notice_types\": [\n \"<string>\"\n ],\n \"since_days\": 123,\n \"agencies\": [\n \"<string>\"\n ],\n \"keywords\": [\n \"<string>\"\n ],\n \"state\": \"<string>\",\n \"set_aside\": \"<string>\",\n \"active_only\": true,\n \"has_contact\": true,\n \"include_description\": true,\n \"limit\": 123\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://win.oneshotagent.com/v1/tools/find/record-solicitations")
.header("Content-Type", "application/json")
.body("{\n \"naics\": [\n \"<string>\"\n ],\n \"notice_types\": [\n \"<string>\"\n ],\n \"since_days\": 123,\n \"agencies\": [\n \"<string>\"\n ],\n \"keywords\": [\n \"<string>\"\n ],\n \"state\": \"<string>\",\n \"set_aside\": \"<string>\",\n \"active_only\": true,\n \"has_contact\": true,\n \"include_description\": true,\n \"limit\": 123\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://win.oneshotagent.com/v1/tools/find/record-solicitations")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"naics\": [\n \"<string>\"\n ],\n \"notice_types\": [\n \"<string>\"\n ],\n \"since_days\": 123,\n \"agencies\": [\n \"<string>\"\n ],\n \"keywords\": [\n \"<string>\"\n ],\n \"state\": \"<string>\",\n \"set_aside\": \"<string>\",\n \"active_only\": true,\n \"has_contact\": true,\n \"include_description\": true,\n \"limit\": 123\n}"
response = http.request(request)
puts response.read_body
Finds federal agencies currently buying what you sell. Send NAICS codes; get back SAM.gov notices, each with the contracting officer’s published name, email and phone. By default it returns only the early notice types (r/p), where no formal solicitation exists yet and the contracting officer is looking for vendors.
Async: POST a request, get a request_id, and poll GET /v1/requests/{request_id} with X-Agent-ID until the job completes. Without the wallet header the poll returns 401 missing_wallet.
Optional
memo (≤ 1000 chars) and decisionContext (object) body fields are stored on the receipt. See Audit Trail.Request
string[]
required
1–20 six-digit NAICS codes, e.g.
["541511"]. See NAICS codes to start from.string[]
default:"['r', 'p']"
1–9 SAM.gov type codes:
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.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. Rows with no recorded place of performance are excluded.
string
Set-aside code:
SBA, 8A, HZC, SDVOSBC, WOSB, …boolean
default:"true"
Drop archived notices and notices whose response deadline has passed.
boolean
default:"false"
true keeps only notices whose point of contact has both a name and an email. Otherwise some rows have contact: null.boolean
default:"true"
Fetch description bodies for the first rows. See the description cap.
number
default:"100"
1–500.
curl -X POST https://win.oneshotagent.com/v1/tools/find/record-solicitations \
-H "Content-Type: application/json" \
-H "payment-signature: <base64 x402 payment>" \
-d '{
"naics": ["541511"],
"has_contact": true,
"since_days": 30
}'
Send the signed payment in the
payment-signature header (see Paying with raw HTTP). The SDK sets it for you.Response
{
"status": "completed",
"result": {
"results": [
{
"notice_id": "a1b2c3d4e5f6",
"notice_type": "sources_sought",
"notice_type_code": "r",
"title": "Custom Software Development Support Services",
"solicitation_number": "W91CRB-26-R-0042",
"agency": "DEPT OF DEFENSE.DEPT OF THE ARMY.AMC",
"naics_code": "541511",
"posted_date": "2026-08-12",
"response_deadline": "2026-09-15T17:00:00Z",
"active": true,
"set_aside": "SBA",
"place_of_performance": { "city": "Huntsville", "state": "AL", "zip": "35805" },
"contact": {
"name": "Jordan Ellis",
"email": "[email protected]",
"phone": "(256) 555-0119",
"title": "Contracting Officer",
"type": "primary"
},
"contacts": [
{ "name": "Jordan Ellis", "email": "[email protected]", "phone": "(256) 555-0119", "title": "Contracting Officer", "type": "primary" }
],
"description": "The government is seeking sources capable of providing custom software development...",
"description_truncated": false,
"url": "https://sam.gov/opp/a1b2c3d4e5f6/view",
"id": "a1b2c3d4e5f6"
}
],
"total_found": 1,
"truncated": false,
"description_fetches": 1,
"data_as_of": "2026-09-07T06:00:00.000Z",
"filters": { "naics": ["541511"], "has_contact": true, "since_days": 30 }
}
}
results: [], total_found: 0. data_as_of is the timestamp of the data snapshot; same-day postings appear the next morning.
The description cap
Only a capped number of rows per search get adescription; it is null on the rest. Top-level truncated: true means the cap stopped some rows short or the search stopped early; description_fetches and the rows with description: null tell which. Per-row description_truncated means the body was cut at the per-notice character cap.
NAICS codes to start from
| Vertical | NAICS |
|---|---|
| Custom computer programming / software dev | 541511 |
| IT systems integration | 541512 |
| Computer facilities management | 541513 |
| Management consulting | 541611 |
| Engineering services | 541330 |
| Commercial building construction | 236220 |
| Facilities support services | 561210 |
| Janitorial services | 561720 |
| Security guard services | 561612 |
| Office administrative services | 561110 |
sam.gov.
SDK
const opportunities = await agent.recordSolicitationsFind({
naics: ['541511'],
has_contact: true,
});
for (const notice of opportunities.results) {
console.log(notice.title, notice.contact?.email);
}