Subawards¶
Subawards (subcontracts reported under federal prime contracts and IDVs) are exposed at /api/subawards/. For field definitions, see the Subawards Data Dictionary.
Endpoints¶
GET /api/subawards/(list + filtering + ordering)GET /api/subawards/{key}/(detail;keyis the report UUID)
Scoped lists:
GET /api/contracts/{key}/subawards/(subawards under a contract)GET /api/entities/{uei}/subawards/(subawards where the entity is the subawardee)
Keys¶
A subaward's key is the subaward report's own identifier: the UUID that SAM.gov assigns to a subcontract report (subAwardReportNumber) and that USAspending republishes as subaward_sam_report_id, in lowercase. One row per report; an amendment keeps the key and changes the values.
Before API version 5.15.0 the key was an integer. Those keys keep resolving until 2027-04-30:
GET /api/subawards/{integer}/answers301to the UUID URL, withDeprecation: trueandSunset: Fri, 30 Apr 2027 00:00:00 GMTheaders.?key=accepts integers beside UUIDs.?shape=…,fsrs_report_idstill answers: the leaf returnskeyin its pre-5.15.0 uppercase spelling. It is not part ofexpand(*).
Update stored keys to the UUIDs before the sunset.
Default response¶
All subaward responses use the shaping pipeline by default. No ?shape= parameter is required to get a shaped response.
Default fields (equivalent to requesting):
amount_suspect,award_key,awarding_office(*),fsrs_details(*),funding_office(*),key,piid,
place_of_performance(*),place_of_performance_id,prime_recipient(uei,display_name),
prime_recipient_id,recipient_id,recipient_parent_id,retired_at,subaward_details(*),
subaward_recipient(uei,display_name)
Shaping¶
Use ?shape= to request a custom field set. Subawards support the following leaves and expansions.
Leaves¶
| Field | Description |
|---|---|
key | The report UUID |
award_key | Prime award identifier, the same convention /api/contracts/{key}/ and /api/idvs/{key}/ use |
piid | Prime award PIID |
prime_awardee_uei | Prime awardee UEI |
prime_recipient_id | The prime awardee's entity id, the uuid of /api/entities/ |
recipient_uei | Subawardee UEI |
recipient_id | The subawardee's entity id |
recipient_parent_uei | Subawardee parent UEI |
recipient_parent_id | The subawardee parent's entity id |
place_of_performance_id | The place-of-performance id, shared with the award resources |
pop_cd_original | Place-of-performance congressional district as reported |
pop_cd_current | Place-of-performance congressional district under current boundaries |
amount_suspect | true when the reported amount is not plausibly a subcontract; see the data dictionary |
retired_at | When the report stopped being published, null while it is live; see Retired reports |
usaspending_permalink | USAspending.gov link |
Expansions¶
| Expansion | Fields |
|---|---|
subaward_details(*) | description, type, number, amount, action_date, fiscal_year |
fsrs_details(*) | last_modified_date (a timestamp), id (the report UUID, same as key), year, month |
place_of_performance(*) | city, state (the two-letter code), zip, country_code, from the shared place record |
highly_compensated_officers(*) | name, amount: a list of up to 5 officers |
prime_recipient(uei,display_name) | Prime awardee identity, resolved against the Entities resource |
subaward_recipient(uei,display_name,duns) | Subawardee identity, resolved against the Entities resource; a subawardee that is not a registered entity returns its uei with display_name: null. duns is always null and is kept only for callers that still request it |
awarding_office(*) | organization_id, office_code, office_name, agency_code, agency_name, department_code, department_name, from the prime award |
funding_office(*) | Same fields as awarding_office |
Recipient and place details are no longer stored on the subaward itself: they come from the entity and place records the ids point at, so a subawardee's name, address and business types are the ones on /api/entities/{uei}/.
Examples¶
# Default response (no shape needed)
/api/subawards/
# Minimal fields
/api/subawards/?shape=key,piid,award_key
# Subaward details with recipient info
/api/subawards/?shape=key,piid,subaward_details(*),subaward_recipient(uei,display_name)
# Office hierarchy for awarding office
/api/subawards/?shape=key,awarding_office(office_code,office_name,agency_name)
# Place of performance
/api/subawards/?shape=key,place_of_performance(city,state,country_code),pop_cd_current
# Report details
/api/subawards/?shape=key,fsrs_details(id,year,month,last_modified_date)
# Highly compensated officers
/api/subawards/?shape=key,highly_compensated_officers(name,amount)
# Discover available fields
/api/subawards/?show_shapes=true
Filtering¶
| Param | What it does |
|---|---|
key | One or more report UUIDs, pipe-separated (key=a|b); an integer is a pre-5.15.0 key and resolves until the sunset. An unknown key matches nothing. |
award_key | Filter by prime award key (exact). |
prime_uei | Filter by prime awardee UEI (exact). |
sub_uei | Filter by subawardee UEI (exact). |
recipient | Search by recipient name (best-effort mapping to UEIs). |
awarding_agency | Filter by prime awarding agency code (exact). |
funding_agency | Filter by prime funding agency code (exact). |
fiscal_year | Filter by subaward action-date fiscal year (exact). |
fiscal_year_gte, fiscal_year_lte | Fiscal year range. |
include_retired | true includes retired reports in the list; see below. |
Retired reports¶
A report that USAspending published and later stopped publishing (and that SAM.gov has not re-filed since) is kept with retired_at set to when Tango first saw it gone, rather than deleted. Lists omit retired reports unless you send include_retired=true; a detail lookup by key always answers. A report only SAM.gov holds is never retired.
Ordering¶
Subawards support ordering= with a strict allowlist:
last_modified_date(the report's last modification,fsrs_details.last_modified_date)
Examples:
- Most recently modified first:
GET /api/subawards/?ordering=-last_modified_date
Pagination¶
Subawards use standard page-number pagination:
page(default 1)limit(max 100)
SDK examples¶
See also: Full SDK method reference — tango-python methods · tango-node methods.
import os
from tango import TangoClient
client = TangoClient(api_key=os.environ["TANGO_API_KEY"])
data = client._get(
"/api/subawards/",
params={"recipient": "deloitte", "ordering": "-last_modified_date", "limit": 10},
)
print("count:", data.get("count"))
import { TangoClient } from "@makegov/tango-node";
const client = new TangoClient({ apiKey: process.env.TANGO_API_KEY });
const http = (client as any).http;
const data = await http.get("/api/subawards/", {
recipient: "deloitte",
ordering: "-last_modified_date",
limit: 10,
});
console.log("count:", data.count);