Skip to content

Notices

Notices are individual SAM.gov notice records exposed at /api/notices/.

If you want “one row per solicitation/opportunity”, use Opportunities. For field definitions, see the Notices Data Dictionary.

Endpoints

  • GET /api/notices/ (list + filtering + search)
  • GET /api/notices/{notice_id}/ (detail)

Filtering

Swagger is the canonical list of query parameters. These are the core filters most people use day-to-day. All date filters require YYYY-MM-DD format; invalid dates or inverted ranges return 400. See Date filters.

Param What it does
search Full-text search over notices (vector-backed).
agency Filter by agency or department (vector-backed).
naics Filter by NAICS.
psc Filter by PSC.
set_aside Filter by set-aside.
notice_type Filter by notice type (valid values are validated).
solicitation_number Filter by solicitation number (exact).
posted_date_after, posted_date_before Posted date range (YYYY-MM-DD).
response_deadline_after, response_deadline_before Response deadline range (YYYY-MM-DD).
active Filter active/inactive.

Ordering

/api/notices/ does not support ordering=....

Pagination

Notices use standard page-number pagination:

  • page (default 1)
  • limit (max 100)

Response Shaping

Notices support the ?shape= query parameter. When no ?shape= is provided, the endpoint returns a default shape.

Default shape (list): active,address(*),attachment_count,award_number,description,last_updated,meta(*),naics_code,notice_id,office(*),opportunity(*),place_of_performance(*),posted_date,psc_code,response_deadline,sam_url,set_aside,solicitation_number,title

Default shape (detail): adds archive(*), primary_contact(*), secondary_contact(*)

set_aside is available as a leaf (returns the description text) or as an expansion set_aside(code,description) for the structured form.

See Response Shaping for syntax and examples.

Notices shaping notes

  • New leaf: opportunity_id is available directly as a leaf (UUID).
  • Bare expand shorthand: common expansions can be requested without parentheses when the runtime must expand them for safety (e.g., office behaves like office(*), and opportunity behaves like opportunity(*)).

Examples:

# Leaf opportunity_id + bare office/opportunity expansions
/api/notices/?shape=notice_id,opportunity_id,office,opportunity&limit=1

SDK examples

import os

from tango import ShapeConfig, TangoClient

client = TangoClient(api_key=os.environ["TANGO_API_KEY"])
resp = client.list_notices(
    agency="DOD",
    notice_type="presol",
    limit=10,
    shape=ShapeConfig.NOTICES_MINIMAL,
)

for n in resp.results:
    print(n.notice_id, n.title)
import { ShapeConfig, TangoClient } from "@makegov/tango-node";

const client = new TangoClient({ apiKey: process.env.TANGO_API_KEY });
const resp = await client.listNotices({
  agency: "DOD",
  notice_type: "presol",
  limit: 10,
  shape: ShapeConfig.NOTICES_MINIMAL,
});

for (const n of resp.results) {
  console.log(n.notice_id, n.title);
}