Vehicles¶
Vehicles provide a solicitation-centric way to discover groups of related IDVs and then expand into the underlying awards.
What is a Vehicle?¶
In Tango, a Vehicle is a grouping of multiple IDVs that share the same solicitation_identifier and the same awarding-agency identifier derived from the IDV award key.
In federal data, each IDV award is a vehicle. In practice, people often think of a “vehicle” as the solicitation that produced many IDV awards (one per awardee). We model that higher-level grouping explicitly.
Vehicles are useful when you want to:
- Find “the contract vehicle” behind a set of IDVs (e.g., the solicitation that produced a schedule/IDIQ vehicle)
- Search across a vehicle’s underlying IDVs
- Pull a shaped list of the IDVs that make up a vehicle
Endpoints¶
- List:
GET /api/vehicles/ - Detail:
GET /api/vehicles/{uuid}/ - Awardees (the underlying IDVs):
GET /api/vehicles/{uuid}/awardees/— supports?search= - Task Orders:
GET /api/vehicles/{uuid}/orders/
Search¶
Vehicle-level search (list)¶
Use ?search= on the list endpoint to search vehicles:
curl -H "X-API-KEY: <key>" \
"https://tango.makegov.com/api/vehicles/?search=GSA%20schedule&page=1"
Award-within-vehicle search (detail, when expanding awards)¶
On the detail endpoint, ?search= is used to filter expanded awardees (IDVs) when your shape includes awardees(...).
Filtering¶
Vehicles support a rich filter set across enums, reference codes, org hierarchy, numeric ranges, and dates. Multi-value enum filters use | for OR semantics. See the full list and details on the Vehicles API Reference.
Quick examples:
# All SEWP-program vehicles awarded in FY 2024 or later
GET /api/vehicles/?program_acronym=SEWP&fiscal_year=2024
# IDIQ vehicles where DOD or DHS is the awarding org
GET /api/vehicles/?type_of_idc=A&agency=DOD|DHS
# Vehicles with at least 100 task orders and $100M+ obligated
GET /api/vehicles/?order_count_min=100&total_obligated_min=100000000
Ordering¶
The vehicles list endpoint supports ordering by activity metrics and statistics using the ?ordering= query parameter.
Available ordering fields (10 total)¶
vehicle_obligations- Total obligations across all IDVs in the vehicle (annotated)latest_award_date- Most recent IDV award date in the vehicle (annotated)awardee_count- Number of IDVs in the vehicle (annotated)vehicle_contracts_value- Sum of total contract value across child orders (annotated)total_obligated- Direct column rollupaward_date- Earliest IDV award datelast_date_to_order- Latest "last date to order" across IDVsfiscal_year- Vehicle fiscal yearidv_count- Denormalized IDV countorder_count- Denormalized task-order count
Ordering syntax¶
- Ascending:
?ordering=vehicle_obligations - Descending:
?ordering=-vehicle_obligations(prefix with-) - Multiple fields:
?ordering=-vehicle_obligations,-latest_award_date
Examples¶
Sort by total obligations (highest first):
curl -H "X-API-KEY: <key>" \
"https://tango.makegov.com/api/vehicles/?ordering=-vehicle_obligations&page=1"
Sort by most recent award activity:
curl -H "X-API-KEY: <key>" \
"https://tango.makegov.com/api/vehicles/?ordering=-latest_award_date&page=1"
Sort by obligations, then by latest award date:
curl -H "X-API-KEY: <key>" \
"https://tango.makegov.com/api/vehicles/?ordering=-vehicle_obligations,-latest_award_date&page=1"
Note: When no ?ordering= parameter is provided, vehicles are ordered by solicitation_identifier, agency_id, and uuid (default ordering).
Task Orders¶
The GET /api/vehicles/{uuid}/orders/ endpoint returns all task orders (contracts) issued against all IDVs within a vehicle. This endpoint supports pagination, response shaping, filtering, search, and transaction expansion, similar to the /api/contracts/ endpoint.
Basic usage¶
curl -H "X-API-KEY: <key>" \
"https://tango.makegov.com/api/vehicles/<vehicle-uuid>/orders/?page=1"
Filtering¶
Filter task orders using the same filters available on /api/contracts/:
# Filter by date range
curl -H "X-API-KEY: <key>" \
"https://tango.makegov.com/api/vehicles/<vehicle-uuid>/orders/?award_date_gte=2024-01-01&award_date_lte=2024-12-31"
# Filter by recipient
curl -H "X-API-KEY: <key>" \
"https://tango.makegov.com/api/vehicles/<vehicle-uuid>/orders/?recipient=ACME"
Response shaping¶
Use the shape parameter to customize fields and expand related objects:
# Include recipient and transaction details
curl -H "X-API-KEY: <key>" \
"https://tango.makegov.com/api/vehicles/<vehicle-uuid>/orders/?shape=key,piid,award_date,recipient(display_name,uei),transactions(description,transaction_date,modification_number)"
Search¶
Search task order descriptions:
curl -H "X-API-KEY: <key>" \
"https://tango.makegov.com/api/vehicles/<vehicle-uuid>/orders/?search=software"
Ordering¶
The orders endpoint supports ordering by contract fields using the ?ordering= parameter (the same allowlist as /api/contracts/):
award_date- Contract award date (default: descending, newest first)obligated- Obligated amounttotal_contract_value- Total contract value (base + all options)
Default ordering: When no ?ordering= parameter is provided, task orders are ordered by -award_date, -uuid (newest first).
Examples:
# Default ordering (newest first)
curl -H "X-API-KEY: <key>" \
"https://tango.makegov.com/api/vehicles/<vehicle-uuid>/orders/?page=1"
# Order by obligated amount (highest first)
curl -H "X-API-KEY: <key>" \
"https://tango.makegov.com/api/vehicles/<vehicle-uuid>/orders/?ordering=-obligated&page=1"
# Order by total contract value
curl -H "X-API-KEY: <key>" \
"https://tango.makegov.com/api/vehicles/<vehicle-uuid>/orders/?ordering=-total_contract_value&page=1"
The response includes vehicle context in the metadata (vehicle UUID and solicitation identifier).
Vehicle metrics and organization¶
Vehicle responses can include two enrichment expansions:
metrics(*)— 12 computed vehicle metrics (HHI, competed-rate, top-recipient share, etc.). Included in the default detail shape; opt-in via?shape=...,metrics(*)on the list endpoint.organization(*)— canonical 7-key office payload (organization_id,office_code,office_name,agency_code,agency_name,department_code,department_name). Both bare?shape=organization(leaf) and?shape=organization(*)(expand) work and return the same payload.
# List vehicles with their metrics bundle and resolved org
curl -H "X-API-KEY: <key>" \
"https://tango.makegov.com/api/vehicles/?shape=uuid,solicitation_identifier,metrics(*),organization(*)&limit=5"
Synthetic GWAC vehicles¶
Some GWAC vehicles lack a real solicitation number; Tango synthesizes a vehicle so the grouping still works. Identify these via:
is_synthetic_solicitation— boolean,truefor synthetic rowsprogram_acronym— the GWAC's identifier (e.g.SEWP)solicitation_identifier— the user-facing value, with the internalACRO:storage prefix stripped automatically
Response shaping¶
Vehicles support the shape parameter, including the awardees(...) expansion.
Example: fetch a vehicle with a shaped list of its IDVs:
curl -H "X-API-KEY: <key>" \
"https://tango.makegov.com/api/vehicles/<vehicle-uuid>/?shape=uuid,solicitation_identifier,organization_id,awardee_count,order_count,vehicle_obligations,vehicle_contracts_value,awardees(key,uuid,piid,award_date,recipient(display_name,uei))"
Example: include opportunity-derived fields and expand the linked Opportunity:
curl -H "X-API-KEY: <key>" \
"https://tango.makegov.com/api/vehicles/<vehicle-uuid>/?shape=uuid,solicitation_identifier,solicitation_title,solicitation_date,naics_code,opportunity(opportunity_id,title,first_notice_date,office(office_name,agency_name))"
Example: expand JSON detail fields to select specific sub-fields:
curl -H "X-API-KEY: <key>" \
"https://tango.makegov.com/api/vehicles/<vehicle-uuid>/?shape=uuid,solicitation_identifier,competition_details(extent_competed,number_of_offers_received),type_of_idc,contract_type"
Example: filter expanded awards within a vehicle:
curl -H "X-API-KEY: <key>" \
"https://tango.makegov.com/api/vehicles/<vehicle-uuid>/?shape=uuid,awardees(key,uuid,recipient(display_name))&search=acme"
See Response Shaping for full syntax and flattening options.