Skip to content

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; key is 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}/ answers 301 to the UUID URL, with Deprecation: true and Sunset: Fri, 30 Apr 2027 00:00:00 GMT headers.
  • ?key= accepts integers beside UUIDs.
  • ?shape=…,fsrs_report_id still answers: the leaf returns key in its pre-5.15.0 uppercase spelling. It is not part of expand(*).

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);