Skip to content

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/

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 rollup
  • award_date - Earliest IDV award date
  • last_date_to_order - Latest "last date to order" across IDVs
  • fiscal_year - Vehicle fiscal year
  • idv_count - Denormalized IDV count
  • order_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 amount
  • total_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, true for synthetic rows
  • program_acronym — the GWAC's identifier (e.g. SEWP)
  • solicitation_identifier — the user-facing value, with the internal ACRO: 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.