Skip to content

OTAs

OTAs (Other Transaction Awards) are awards exposed at /api/otas/. For field definitions, see the OTAs Data Dictionary.

Endpoints

  • GET /api/otas/ (list + filtering + search + ordering)
  • GET /api/otas/{key}/ (detail)

Entity-scoped list:

  • GET /api/entities/{uei}/otas/ (behaves like /api/otas/ scoped to an entity)

Filtering

OTAs share most of the "award" filtering surface with contracts/IDVs, except they do not support some contracts-specific filters (like NAICS).

Common filters you can use:

Param What it does
search Full-text-ish search over award search vectors.
recipient Search by recipient/vendor name.
uei Filter by recipient UEI (exact).
piid Filter by PIID (case-insensitive).
awarding_agency, funding_agency Filter by awarding/funding agency (best-effort matching).
psc Filter by PSC.
award_date, award_date_gte, award_date_lte Award date filters.
fiscal_year, fiscal_year_gte, fiscal_year_lte Fiscal year filters.
pop_start_date_gte, pop_start_date_lte Period of performance start date range (when present).
pop_end_date_gte, pop_end_date_lte Period of performance end date range (when present).
expiring_gte, expiring_lte Expiration window range filters.
obligated Filter by obligated amount (exact USD value).
ordering Sort results (allowlist: award_date, obligated, total_contract_value; prefix with - for descending).

Ordering

OTAs support ordering= with a strict allowlist:

  • award_date
  • obligated
  • total_contract_value

Examples:

  • Newest first: GET /api/otas/?ordering=-award_date
  • Largest obligations first: GET /api/otas/?ordering=-obligated

Pagination

High-volume award endpoints use cursor-based (keyset) pagination:

  • limit
  • cursor (follow next / previous URLs)

Response Shaping

OTA endpoints support the ?shape= parameter for customizing response fields. See Response Shaping for full syntax.

Shapeable fields

Field Type Notes
key scalar Award key
piid scalar
award_date scalar
award_type scalar or expand Expandable to {code, description} (OTA-specific: "O" = Other Transaction Non-Research, "R" = Other Transaction for Research)
fiscal_year scalar
obligated scalar
total_contract_value scalar
description scalar
base_and_exercised_options_value scalar
psc_code scalar
consortia scalar
consortia_uei scalar
dod_acquisition_program scalar
non_governmental_dollars scalar
non_traditional_government_contractor_participation scalar
parent_award_modification_number scalar
type_of_ot_agreement scalar or expand Expandable to {code, description}
extent_competed scalar or expand Expandable to {code, description}
transactions scalar Raw snapshot list

Expandable fields

Expand Fields
recipient(*) uei, display_name, legal_business_name, cage, duns
place_of_performance(*) country_code, country_name, state_code, state_name, city_name, zip_code
awarding_office(*) office_code, office_name, agency_code, agency_name, department_code, department_name
funding_office(*) same as awarding_office
parent_award(key,piid) key, piid
period_of_performance(*) start_date, current_end_date, ultimate_completion_date
transactions(*) modification_number, transaction_date, obligated, description, action_type
psc(*) code, description
award_type(*) code, description (OTA-specific choices)
type_of_ot_agreement(*) code, description
extent_competed(*) code, description

Examples

Request only key fields:

GET /api/otas/?shape=key,piid,award_date,obligated

Expand recipient and extent competed with description:

GET /api/otas/?shape=key,piid,recipient(uei,display_name),extent_competed(code,description)

Expand type of OT agreement:

GET /api/otas/?shape=key,type_of_ot_agreement(code,description)

SDK examples

The official SDKs don't yet expose a first-class list_otas() / listOTAs() method. You can still call the endpoint via the SDK's internal HTTP helper.

import os

from tango import TangoClient

client = TangoClient(api_key=os.environ["TANGO_API_KEY"])
data = client._get(
    "/api/otas/",
    params={"search": "DARPA", "ordering": "-award_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/otas/", {
  search: "DARPA",
  ordering: "-award_date",
  limit: 10,
});

console.log("count:", data.count);