Exclusions¶
Exclusions are SAM.gov exclusion records — debarments, suspensions, and other exclusions from federal awards — exposed at /api/exclusions/. For field definitions, see the Exclusions Data Dictionary.
Authentication: Exclusions endpoints require authentication (API key or OAuth2). Unauthenticated requests receive HTTP 401. Available on every plan, including Free — no tier gating on any field.
Endpoints¶
GET /api/exclusions/(list + filtering + search + ordering)GET /api/exclusions/{exclusion_key}/(detail)
The detail path segment is the exclusion_key — a 64-character SHA-256 hex digest that is the record's primary key. Any other shape returns HTTP 404.
Currency: who is excluded today¶
Whether an exclusion is in force is derived at query time from its dates, not stored as a flag:
?active=truereturns the exclusions in force today.?active=falsereturns the complement (expired, not-yet-active, or lifted). Omittingactivereturns everything.- Every result carries a computed
is_currently_excludedboolean regardless of the filter. - An exclusion is current when it has not been lifted (
delisted_atis null), itsactivate_dateis null or on/before today, and itstermination_dateis null or after today. A nullactivate_datecounts as current (fails closed for OFAC/SDN-style records). termination_dateof year 2227 is SAM.gov's INDEFINITE sentinel, stored as a real date — such records read as current until explicitly lifted.
Because currency is derived, an exclusion merely reaching its termination_date is not a change to the record — see Webhooks for what does and does not fire an alert.
Filtering¶
Core filters (identifier and classification filters accept | for OR; date filters require YYYY-MM-DD format — invalid dates or inverted ranges return 400, see Date filters):
| Param | What it does |
|---|---|
active | Boolean. true returns exclusions in force today; false returns the complement. |
classification_type | Classification (e.g. Firm, Individual, Special Entity Designation). Multi-value: use | for OR. |
exclusion_type | Exclusion type (e.g. Ineligible (Proceedings Pending), Prohibition/Restriction). Multi-value: use | for OR. |
exclusion_program | Exclusion program (e.g. Reciprocal, Non-Procurement, Procurement). Multi-value: use | for OR. |
excluding_agency_code | Code of the agency that created the exclusion. Multi-value: use | for OR. |
excluding_agency_name | Name of the excluding agency. Multi-value: use | for OR. |
uei | SAM.gov Unique Entity Identifier on the exclusion record. Multi-value: use | for OR. |
cage_code | CAGE code on the exclusion record. Multi-value: use | for OR. |
npi | National Provider Identifier. Multi-value: use | for OR. |
entity_uei | UEI of the resolved Tango entity (set when the exclusion links to a registered entity). Multi-value: use | for OR. |
delisted | Boolean. true returns only lifted exclusions (delisted_at is set); false returns those still in the catalog. |
activate_date_after, activate_date_before | Activation date range (YYYY-MM-DD). |
termination_date_after, termination_date_before | Termination date range (YYYY-MM-DD). |
update_date_after, update_date_before | SAM update-date range (YYYY-MM-DD). |
search | Full-text search over names, excluding agency, and comments. |
Ordering¶
Exclusions support ordering= with a strict allowlist:
activate_datetermination_datecreate_dateupdate_datemodifiedrank— relevance; meaningful only when?search=is present (results default to relevance order under search)
Examples:
- Most recently updated first:
GET /api/exclusions/?ordering=-update_date - Soonest to terminate:
GET /api/exclusions/?ordering=termination_date
Pagination¶
Exclusions use standard page-number pagination:
page(default 1)limit(default 25, max 100)
Shaping¶
Exclusions default to the shaping pipeline — all responses render through shaping even without ?shape=. Exclusions are a flat resource: there are no expandable relations (no * expansions).
- List default:
exclusion_key,classification_type,exclusion_type,excluding_agency_name,entity_name,display_name,activate_date,termination_date,termination_type,is_currently_excluded - Detail default: every allowed field, including identifiers, name parts, addresses, free text, the vessel block, and provenance dates.
The API field references maps to the underlying exclusion_references payload. See the Exclusions Data Dictionary for the full field list and Response Shaping for syntax.
Examples:
# Firms currently excluded, timeline fields
GET /api/exclusions/?active=true&classification_type=Firm&shape=exclusion_key,entity_name,exclusion_type,activate_date,termination_date
# By UEI, minimal payload
GET /api/exclusions/?uei=ABC123DEF456&shape=exclusion_key,entity_name,is_currently_excluded
# Recently lifted exclusions
GET /api/exclusions/?delisted=true&ordering=-update_date&shape=exclusion_key,entity_name,delisted_at
# Detail by exclusion_key
GET /api/exclusions/{exclusion_key}/?shape=exclusion_key,entity_name,exclusion_type,references
Notes:
*is only valid inside expansions; exclusions have none, so use explicit field lists.- Invalid
shapefields return HTTP 400 with structured validation errors.