From dd614cbdc1b59d43553e33383504bbf67d220b25 Mon Sep 17 00:00:00 2001 From: "V. David Zvenyach" Date: Fri, 2 Oct 2026 17:11:09 -0500 Subject: [PATCH 1/3] feat(vehicles): add holder_count and order_winner_count, deprecate awardee_count Tango API 5.8.0 adds two company counts to vehicles: `holder_count` (distinct companies holding one of the vehicle's IDVs) and `order_winner_count` (distinct companies that have won a task order under it). Both join the default `VEHICLES_MINIMAL` and `VEHICLES_COMPREHENSIVE` shapes and the explicit vehicle schema. `awardee_count` is documented as deprecated, since it is the same value as `order_winner_count`. Re-vendors the 5.8.0 contract and regenerates the shape overlay; the contract's new budget-account `data_through_period` filters are baselined until the SDK adds them. Co-Authored-By: Claude Opus 5.5 --- CHANGELOG.md | 12 ++++++++++ contracts/conformance_baseline.json | 4 ++++ contracts/filter_shape_contract.json | 31 +++++++++++++++++++++++++- contracts/observed_shape_types.json | 12 ++++++++++ docs/API_REFERENCE.md | 7 ++++-- tango/models.py | 7 ++++-- tango/shapes/explicit_schemas.py | 5 +++++ tango/shapes/generated_overlay.py | 3 +++ tests/test_client.py | 33 ++++++++++++++++++++++++++++ 9 files changed, 109 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b6d64a7..54f8cde 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,18 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Added + +- **`holder_count` and `order_winner_count` on vehicles** (Tango API 5.8.0). `holder_count` is the number of distinct companies holding one of the vehicle's IDVs, and `order_winner_count` is the number of distinct companies that have won a task order under it. Both are in the default `VEHICLES_MINIMAL` and `VEHICLES_COMPREHENSIVE` shapes and accepted in custom shapes. + +### Changed + +- Re-vendored `contracts/filter_shape_contract.json` (Tango API 5.8.0) and regenerated `tango/shapes/generated_overlay.py`. The contract's new `data_through_period` budget-account filters are baselined in `contracts/conformance_baseline.json` until the SDK adds them. + +### Deprecated + +- **`awardee_count` on vehicles.** It is the same value as `order_winner_count`; use that instead. The API removes it at its next major version, and the SDK's default vehicle shapes will drop it then. + ## [1.12.0] - 2026-10-02 ### Added diff --git a/contracts/conformance_baseline.json b/contracts/conformance_baseline.json index a0252bb..088f34a 100644 --- a/contracts/conformance_baseline.json +++ b/contracts/conformance_baseline.json @@ -27,6 +27,10 @@ "bea_category__in", "bureau_name__icontains", "bureau_name__in", + "data_through_period", + "data_through_period__gte", + "data_through_period__isnull", + "data_through_period__lte", "federal_account_symbol__in", "fiscal_year__in", "subfunction_code__in" diff --git a/contracts/filter_shape_contract.json b/contracts/filter_shape_contract.json index b8b8cac..28e7e52 100644 --- a/contracts/filter_shape_contract.json +++ b/contracts/filter_shape_contract.json @@ -1,6 +1,6 @@ { "meta": { - "api_version": "5.7.0", + "api_version": "5.8.0", "description": "Canonical API filter/shape contract. Downstream consumers (SDK, MCP) should validate their conformance against this manifest.", "generated_from": "scripts/filter_shape_conformance.py", "schema_version": 2 @@ -1672,6 +1672,10 @@ "contract_share_of_obligated_capped", "contract_share_of_obligated_capped__gte", "contract_share_of_obligated_capped__lte", + "data_through_period", + "data_through_period__gte", + "data_through_period__isnull", + "data_through_period__lte", "enacted_ba", "enacted_ba_5yr_cagr", "enacted_ba_5yr_cagr__gte", @@ -1933,6 +1937,25 @@ "lookup": "lte", "type": "number" }, + "data_through_period": { + "filter_class": "NumberFilter", + "type": "number" + }, + "data_through_period__gte": { + "filter_class": "NumberFilter", + "lookup": "gte", + "type": "number" + }, + "data_through_period__isnull": { + "filter_class": "BooleanFilter", + "lookup": "isnull", + "type": "boolean" + }, + "data_through_period__lte": { + "filter_class": "NumberFilter", + "lookup": "lte", + "type": "number" + }, "enacted_ba": { "filter_class": "NumberFilter", "type": "number" @@ -2304,6 +2327,7 @@ "contract_share_of_obligated", "contract_share_of_obligated_capped", "created", + "data_through_period", "enacted_ba", "enacted_ba_5yr_cagr", "enacted_ba_yoy_pct", @@ -2392,6 +2416,7 @@ "contract_share_of_obligated", "contract_share_of_obligated_capped", "created", + "data_through_period", "enacted_ba", "enacted_ba_5yr_cagr", "enacted_ba_yoy_pct", @@ -16061,6 +16086,7 @@ "description", "descriptions", "fiscal_year", + "holder_count", "idv_count", "is_synthetic_solicitation", "last_date_to_order", @@ -16069,6 +16095,7 @@ "name", "opportunity_id", "order_count", + "order_winner_count", "organization", "organization_id", "program_acronym", @@ -16474,6 +16501,7 @@ "description", "descriptions", "fiscal_year", + "holder_count", "idv_count", "is_synthetic_solicitation", "last_date_to_order", @@ -16600,6 +16628,7 @@ "opportunity.title", "opportunity_id", "order_count", + "order_winner_count", "organization", "organization.agency_code", "organization.agency_name", diff --git a/contracts/observed_shape_types.json b/contracts/observed_shape_types.json index 7229010..0a4c214 100644 --- a/contracts/observed_shape_types.json +++ b/contracts/observed_shape_types.json @@ -12494,6 +12494,12 @@ "kind": "scalar", "type": "int" }, + "holder_count": { + "is_list": false, + "is_optional": true, + "kind": "scalar", + "type": "int" + }, "idv_count": { "is_list": false, "is_optional": true, @@ -12708,6 +12714,12 @@ "kind": "scalar", "type": "int" }, + "order_winner_count": { + "is_list": false, + "is_optional": true, + "kind": "scalar", + "type": "int" + }, "organization": { "is_list": false, "is_optional": false, diff --git a/docs/API_REFERENCE.md b/docs/API_REFERENCE.md index b4c76b0..d4a52c8 100644 --- a/docs/API_REFERENCE.md +++ b/docs/API_REFERENCE.md @@ -599,7 +599,10 @@ The post-cutover (May 2026) vehicle response includes these top-level fields, al | `vehicle_type`, `who_can_use`, `type_of_idc`, `contract_type` | dict \| None | Returned as `{code, description}`. | | `description` | str \| None | Common text across IDV descriptions. | | `descriptions` | list[str] \| None | Distinct IDV descriptions. | -| `idv_count`, `awardee_count`, `order_count` | int \| None | Denormalized rollups. | +| `idv_count`, `order_count` | int \| None | Denormalized rollups. | +| `holder_count` | int \| None | Distinct companies holding one of the vehicle's IDVs. | +| `order_winner_count` | int \| None | Distinct companies that have won a task order under the vehicle. | +| `awardee_count` | int \| None | **Deprecated.** Same value as `order_winner_count`; use that instead. Removed at the next major API version. | | `total_obligated`, `vehicle_obligations`, `vehicle_contracts_value` | Decimal \| None | Denormalized rollups. | | `award_date`, `latest_award_date`, `last_date_to_order` | date \| None | | | `solicitation_title`, `solicitation_description`, `solicitation_date`, `opportunity_id` | str / date / None | From SAM.gov via the linked Opportunity. | @@ -2544,7 +2547,7 @@ entity = client.get_entity("UEI_KEY", shape=ShapeConfig.ENTITIES_COMPREHENSIVE) | `GRANTS_MINIMAL` | `list_grants` | grant_id, opportunity_number, title, status(*), agency_code | | `IDVS_MINIMAL` | `list_idvs`, `list_vehicle_awardees` | key, piid, award_date, recipient(display_name,uei), description, total_contract_value, obligated, idv_type | | `IDVS_COMPREHENSIVE` | `get_idv` | Full IDV with offices, place_of_performance, competition, transactions, etc. | -| `VEHICLES_MINIMAL` | `list_vehicles` | uuid, solicitation_identifier, is_synthetic_solicitation, program_acronym, organization_id, organization, vehicle_type, description, idv_count, awardee_count, order_count, total_obligated, vehicle_obligations, vehicle_contracts_value, latest_award_date, solicitation_title, solicitation_date | +| `VEHICLES_MINIMAL` | `list_vehicles` | uuid, solicitation_identifier, is_synthetic_solicitation, program_acronym, organization_id, organization, vehicle_type, description, idv_count, holder_count, order_winner_count, awardee_count, order_count, total_obligated, vehicle_obligations, vehicle_contracts_value, latest_award_date, solicitation_title, solicitation_date | | `VEHICLES_COMPREHENSIVE` | `get_vehicle` | Full vehicle with competition_details, fiscal_year, set_aside, etc. | | `VEHICLE_AWARDEES_MINIMAL` | `list_vehicle_awardees` | uuid, key, piid, award_date, title, order_count, idv_obligations, idv_contracts_value, recipient(display_name,uei) | | `ORGANIZATIONS_MINIMAL` | `list_organizations` | key, fh_key, name, level, type, short_name | diff --git a/tango/models.py b/tango/models.py index aaf6956..93e4d50 100644 --- a/tango/models.py +++ b/tango/models.py @@ -489,6 +489,8 @@ class Vehicle: program_acronym: str | None = None description: str | None = None idv_count: int | None = None + holder_count: int | None = None + order_winner_count: int | None = None total_obligated: Decimal | None = None latest_award_date: date | None = None solicitation_title: str | None = None @@ -1752,7 +1754,7 @@ class ShapeConfig: VEHICLES_MINIMAL: Final = ( "uuid,solicitation_identifier,is_synthetic_solicitation,program_acronym," "organization_id,organization,vehicle_type,description," - "idv_count,awardee_count,order_count,total_obligated," + "idv_count,holder_count,order_winner_count,awardee_count,order_count,total_obligated," "vehicle_obligations,vehicle_contracts_value,latest_award_date," "solicitation_title,solicitation_date" ) @@ -1764,7 +1766,8 @@ class ShapeConfig: "solicitation_title,solicitation_description,solicitation_date,opportunity_id," "naics_code,psc_code,set_aside," "fiscal_year,award_date,latest_award_date,last_date_to_order," - "description,idv_count,awardee_count,order_count,total_obligated," + "description,idv_count,holder_count,order_winner_count,awardee_count,order_count," + "total_obligated," "vehicle_obligations,vehicle_contracts_value," "type_of_idc,contract_type,metrics(*)" ) diff --git a/tango/shapes/explicit_schemas.py b/tango/shapes/explicit_schemas.py index 2279959..8de842b 100644 --- a/tango/shapes/explicit_schemas.py +++ b/tango/shapes/explicit_schemas.py @@ -1337,6 +1337,11 @@ ), # Denormalized rollups "idv_count": FieldSchema(name="idv_count", type=int, is_optional=True, is_list=False), + "holder_count": FieldSchema(name="holder_count", type=int, is_optional=True, is_list=False), + "order_winner_count": FieldSchema( + name="order_winner_count", type=int, is_optional=True, is_list=False + ), + # Deprecated: same value as `order_winner_count`; removed at the next major API version. "awardee_count": FieldSchema(name="awardee_count", type=int, is_optional=True, is_list=False), "order_count": FieldSchema(name="order_count", type=int, is_optional=True, is_list=False), "total_obligated": FieldSchema( diff --git a/tango/shapes/generated_overlay.py b/tango/shapes/generated_overlay.py index ec42e60..284ba7c 100644 --- a/tango/shapes/generated_overlay.py +++ b/tango/shapes/generated_overlay.py @@ -1318,6 +1318,9 @@ name="contract_share_of_obligated_capped", type=str, is_optional=True, is_list=False ), "created": FieldSchema(name="created", type=datetime, is_optional=True, is_list=False), + "data_through_period": FieldSchema( + name="data_through_period", type=str, is_optional=True, is_list=False + ), "enacted_ba": FieldSchema(name="enacted_ba", type=str, is_optional=True, is_list=False), "enacted_ba_5yr_cagr": FieldSchema( name="enacted_ba_5yr_cagr", type=str, is_optional=True, is_list=False diff --git a/tests/test_client.py b/tests/test_client.py index cf170b4..423cf81 100644 --- a/tests/test_client.py +++ b/tests/test_client.py @@ -708,6 +708,39 @@ def test_get_budget_account_accepts_explicit_anomaly_shape(self, mock_request): assert account["source_anomalies"] == [{"code": "some_future_code"}] assert account["account_category"] == "budgetary" + @pytest.mark.parametrize( + ("method", "args"), + [("list_vehicles", ()), ("get_vehicle", ("11111111-1111-1111-1111-111111111111",))], + ) + @patch("tango.client.httpx.Client.request") + def test_vehicle_default_shapes_parse_company_counts(self, mock_request, method, args): + vehicle = { + "uuid": "11111111-1111-1111-1111-111111111111", + "holder_count": 12, + "order_winner_count": 7, + "awardee_count": 7, + } + body = ( + {"count": 1, "next": None, "previous": None, "results": [vehicle]} + if method == "list_vehicles" + else vehicle + ) + mock_response = Mock() + mock_response.is_success = True + mock_response.json.return_value = body + mock_response.content = b"{}" + mock_request.return_value = mock_response + + client = TangoClient(api_key="test-key") + result = getattr(client, method)(*args) + + shape_fields = mock_request.call_args[1]["params"]["shape"].split(",") + assert {"holder_count", "order_winner_count", "awardee_count"} <= set(shape_fields) + parsed = result.results[0] if method == "list_vehicles" else result + assert parsed["holder_count"] == 12 + assert parsed["order_winner_count"] == 7 + assert parsed["awardee_count"] == 7 + class TestShapeConfig: """Test ShapeConfig class""" From 714f4278c2736f943d3beb7e29fc88634360f36a Mon Sep 17 00:00:00 2001 From: "V. David Zvenyach" Date: Fri, 2 Oct 2026 17:12:52 -0500 Subject: [PATCH 2/3] feat(budget): add data_through_period to budget accounts Tango API 5.8.0 adds `data_through_period` to budget accounts: the File A period (1-12) an account-year's figures run through. It joins the default `BUDGET_ACCOUNTS_MINIMAL` shape and the generated budget-account schema (typed `int`), and `list_budget_accounts()` gains `data_through_period`, `data_through_period_gte`, `data_through_period_lte` and `data_through_period_isnull` filters. The conformance baseline entries for those filters are removed now that the SDK exposes them. Co-Authored-By: Claude Opus 5.5 --- CHANGELOG.md | 4 +++- contracts/conformance_baseline.json | 4 ---- contracts/observed_shape_types.json | 6 ++++++ docs/API_REFERENCE.md | 9 ++++++++- tango/client.py | 14 +++++++++++++- tango/models.py | 5 ++++- tango/shapes/generated_overlay.py | 2 +- tests/test_client.py | 30 +++++++++++++++++++++++++++++ 8 files changed, 65 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 54f8cde..1ddbc29 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,10 +10,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - **`holder_count` and `order_winner_count` on vehicles** (Tango API 5.8.0). `holder_count` is the number of distinct companies holding one of the vehicle's IDVs, and `order_winner_count` is the number of distinct companies that have won a task order under it. Both are in the default `VEHICLES_MINIMAL` and `VEHICLES_COMPREHENSIVE` shapes and accepted in custom shapes. +- **`data_through_period` on budget accounts** (Tango API 5.8.0). The File A period (1-12) an account-year's figures run through; below 12 the year is partial, and `None` means there is no File A data. It is in the default `BUDGET_ACCOUNTS_MINIMAL` shape and accepted in custom shapes. +- **`list_budget_accounts(data_through_period=..., data_through_period_gte=..., data_through_period_lte=..., data_through_period_isnull=...)`** filters by that period, exactly, by range, or by whether it is set. ### Changed -- Re-vendored `contracts/filter_shape_contract.json` (Tango API 5.8.0) and regenerated `tango/shapes/generated_overlay.py`. The contract's new `data_through_period` budget-account filters are baselined in `contracts/conformance_baseline.json` until the SDK adds them. +- Re-vendored `contracts/filter_shape_contract.json` (Tango API 5.8.0) and regenerated `tango/shapes/generated_overlay.py`. ### Deprecated diff --git a/contracts/conformance_baseline.json b/contracts/conformance_baseline.json index 088f34a..a0252bb 100644 --- a/contracts/conformance_baseline.json +++ b/contracts/conformance_baseline.json @@ -27,10 +27,6 @@ "bea_category__in", "bureau_name__icontains", "bureau_name__in", - "data_through_period", - "data_through_period__gte", - "data_through_period__isnull", - "data_through_period__lte", "federal_account_symbol__in", "fiscal_year__in", "subfunction_code__in" diff --git a/contracts/observed_shape_types.json b/contracts/observed_shape_types.json index 0a4c214..a69ffff 100644 --- a/contracts/observed_shape_types.json +++ b/contracts/observed_shape_types.json @@ -308,6 +308,12 @@ "kind": "scalar", "type": "int" }, + "data_through_period": { + "is_list": false, + "is_optional": true, + "kind": "scalar", + "type": "int" + }, "narratives": { "is_list": true, "is_optional": false, diff --git a/docs/API_REFERENCE.md b/docs/API_REFERENCE.md index d4a52c8..2299918 100644 --- a/docs/API_REFERENCE.md +++ b/docs/API_REFERENCE.md @@ -1775,6 +1775,10 @@ accounts = client.list_budget_accounts( subfunction_code=None, account_category=None, account_category_in=None, + data_through_period=None, + data_through_period_gte=None, + data_through_period_lte=None, + data_through_period_isnull=None, search=None, ordering=None, ) @@ -1792,6 +1796,9 @@ accounts = client.list_budget_accounts( - `subfunction_code` - Subfunction code (exact) - `account_category` - Account category (exact): `budgetary` or `credit_financing` today; treat it as an open string - `account_category_in` - Comma-separated account categories to match any of (e.g. `"budgetary,credit_financing"`) +- `data_through_period` - File A period (1-12) the account-year's figures run through (exact); below 12 the year is partial +- `data_through_period_gte` / `data_through_period_lte` - `data_through_period` range +- `data_through_period_isnull` - `True` for accounts with no File A data, `False` for accounts with it - `search` - Full-text search over `account_title`, `agency_name`, `bureau_name` - `ordering` - Sort field; prefix with `-` for descending. The default is the latest fiscal year first, then largest `enacted_ba` first, with accounts that have no `enacted_ba` last. @@ -2562,7 +2569,7 @@ entity = client.get_entity("UEI_KEY", shape=ShapeConfig.ENTITIES_COMPREHENSIVE) | `FEDERAL_REGISTER_COMPREHENSIVE` | `get_federal_register_document` | The list fields plus dates, signing_date, start_page, end_page, volume, docket_ids, dockets, regulation_id_numbers, topics, correction_of, corrections, executive_order_number, presidential_document_number, proclamation_number, comment_url, regulations_dot_gov_url, raw_text_url, body_html_url (omits `full_text`) | | `EBUY_REQUESTS_MINIMAL` | `list_ebuy_requests` | rfq_id, request_type, title, schedule, sin, status, buyer_name, buyer_agency, buyer_agency_code, reference_number, issue_date, close_date, attachment_count, link_count, last_seen | | `EBUY_REQUESTS_COMPREHENSIVE` | `get_ebuy_request` | Every field, plus the `organization` and `attachments` expands | -| `BUDGET_ACCOUNTS_MINIMAL` | `list_budget_accounts`, `get_budget_account` | id, federal_account_symbol, fiscal_year, agency_code/name, bureau_name, account_title, bea_category, on_off_budget, subfunction_code, account_category, lifecycle (requested/enacted/apportioned/obligated/outlayed/unobligated), contract & assistance rollups, key ratios, next-year growth, source_anomalies | +| `BUDGET_ACCOUNTS_MINIMAL` | `list_budget_accounts`, `get_budget_account` | id, federal_account_symbol, fiscal_year, data_through_period, agency_code/name, bureau_name, account_title, bea_category, on_off_budget, subfunction_code, account_category, lifecycle (requested/enacted/apportioned/obligated/outlayed/unobligated), contract & assistance rollups, key ratios, next-year growth, source_anomalies | | `VEHICLE_ORDERS_MINIMAL` | `list_vehicle_orders` | key, piid, award_date, recipient(display_name,uei), total_contract_value, obligated | | `ITDASHBOARD_INVESTMENTS_MINIMAL` | `list_itdashboard_investments` | Minimal IT Dashboard investment fields | | `ITDASHBOARD_INVESTMENTS_COMPREHENSIVE` | `get_itdashboard_investment` | Full investment fields: uii, agency_code, agency_name, bureau_code, bureau_name, investment_title, type_of_investment, part_of_it_portfolio, updated_time, url | diff --git a/tango/client.py b/tango/client.py index c673dfd..6fd1ee6 100644 --- a/tango/client.py +++ b/tango/client.py @@ -4450,6 +4450,10 @@ def list_budget_accounts( subfunction_code: str | None = None, account_category: str | None = None, account_category_in: str | None = None, + data_through_period: int | None = None, + data_through_period_gte: int | None = None, + data_through_period_lte: int | None = None, + data_through_period_isnull: bool | None = None, # Range-numeric filters: each field also accepts ``__gte`` / ``__lte``. requested_ba: float | None = None, requested_ba_gte: float | None = None, @@ -4561,6 +4565,8 @@ def list_budget_accounts( categories may be added. account_category_in: Comma-separated account categories to match any of, e.g. ``"budgetary,credit_financing"``. + data_through_period: File A period (1-12) the account-year's figures run through (exact). Also ``data_through_period_gte`` / ``data_through_period_lte``; a value below 12 means a partial year. + data_through_period_isnull: ``True`` for accounts with no File A data, ``False`` for accounts with it. requested_ba: President's-budget requested BA (exact). Also ``requested_ba_gte`` / ``requested_ba_lte`` for range queries. enacted_ba: Enacted budget authority (exact / gte / lte). @@ -4630,11 +4636,17 @@ def list_budget_accounts( ("subfunction_code", subfunction_code), ("account_category", account_category), ("account_category__in", account_category_in), + ("data_through_period", data_through_period), + ("data_through_period__gte", data_through_period_gte), + ("data_through_period__lte", data_through_period_lte), + ("data_through_period__isnull", data_through_period_isnull), ("search", search), ("ordering", ordering), ) for key, val in scalar_filters: - if val is not None: + if isinstance(val, bool): + params[key] = "true" if val else "false" + elif val is not None: params[key] = val # Range-numeric filters: each field has exact / __gte / __lte forms. range_filters: tuple[tuple[str, float | None, float | None, float | None], ...] = ( diff --git a/tango/models.py b/tango/models.py index 93e4d50..be1d39b 100644 --- a/tango/models.py +++ b/tango/models.py @@ -849,6 +849,8 @@ class BudgetAccount: id: int | None = None federal_account_symbol: str | None = None fiscal_year: int | None = None + # File A period (1-12) this account-year's figures run through; below 12 the year is partial, and `None` means no File A data. + data_through_period: int | None = None agency_code: str | None = None agency_name: str | None = None bureau_name: str | None = None @@ -1783,7 +1785,8 @@ class ShapeConfig: # Default for list_budget_accounts() / get_budget_account() # Mirrors the API's BUDGET_ACCOUNT_DEFAULT_SHAPE. BUDGET_ACCOUNTS_MINIMAL: Final = ( - "id,federal_account_symbol,fiscal_year,agency_code,agency_name,bureau_name," + "id,federal_account_symbol,fiscal_year,data_through_period,agency_code,agency_name," + "bureau_name," "account_title,bea_category,on_off_budget,subfunction_code,account_category," "requested_ba,enacted_ba,apportioned,obligated_total,outlayed_total," "unobligated_balance,contract_obligated,contract_share_of_obligated_capped," diff --git a/tango/shapes/generated_overlay.py b/tango/shapes/generated_overlay.py index 284ba7c..62724de 100644 --- a/tango/shapes/generated_overlay.py +++ b/tango/shapes/generated_overlay.py @@ -1319,7 +1319,7 @@ ), "created": FieldSchema(name="created", type=datetime, is_optional=True, is_list=False), "data_through_period": FieldSchema( - name="data_through_period", type=str, is_optional=True, is_list=False + name="data_through_period", type=int, is_optional=True, is_list=False ), "enacted_ba": FieldSchema(name="enacted_ba", type=str, is_optional=True, is_list=False), "enacted_ba_5yr_cagr": FieldSchema( diff --git a/tests/test_client.py b/tests/test_client.py index 423cf81..b3f7e76 100644 --- a/tests/test_client.py +++ b/tests/test_client.py @@ -624,6 +624,36 @@ def test_list_budget_accounts_account_category_filters(self, mock_request): assert params["account_category"] == "credit_financing" assert params["account_category__in"] == "budgetary,credit_financing" + @pytest.mark.parametrize("isnull", [True, False]) + @patch("tango.client.httpx.Client.request") + def test_list_budget_accounts_data_through_period_filters(self, mock_request, isnull): + mock_response = Mock() + mock_response.is_success = True + mock_response.json.return_value = { + "count": 1, + "next": None, + "previous": None, + "results": [{"id": 1, "fiscal_year": 2026, "data_through_period": 9}], + } + mock_response.content = b"{}" + mock_request.return_value = mock_response + + client = TangoClient(api_key="test-key") + page = client.list_budget_accounts( + data_through_period=9, + data_through_period_gte=6, + data_through_period_lte=11, + data_through_period_isnull=isnull, + ) + + params = mock_request.call_args[1]["params"] + assert params["data_through_period"] == 9 + assert params["data_through_period__gte"] == 6 + assert params["data_through_period__lte"] == 11 + assert params["data_through_period__isnull"] == ("true" if isnull else "false") + assert "data_through_period" in params["shape"].split(",") + assert page.results[0]["data_through_period"] == 9 + @patch("tango.client.httpx.Client.request") def test_list_budget_accounts_default_shape_parses_source_anomalies(self, mock_request): anomaly = { From 26d1d4ed4c6ef169601ca7210850b7aa3cacbb59 Mon Sep 17 00:00:00 2001 From: "V. David Zvenyach" Date: Fri, 2 Oct 2026 18:14:12 -0500 Subject: [PATCH 3/3] test(vehicles): re-record vehicle cassettes against API 5.8.0 The default vehicle shapes now request holder_count and order_winner_count, so the recorded request URLs changed. Co-Authored-By: Claude Opus 5.5 --- ...get_vehicle_supports_joiner_and_flat_lists | 74 ++++---- ...on.test_get_vehicle_with_metrics_expansion | 78 ++++---- ...t_list_vehicle_awardees_uses_default_shape | 84 ++++----- ...est_list_vehicle_orders_uses_default_shape | 108 +++++------ ...ist_vehicles_uses_default_shape_and_search | 168 +++++++++--------- 5 files changed, 264 insertions(+), 248 deletions(-) diff --git a/tests/cassettes/TestVehiclesIntegration.test_get_vehicle_supports_joiner_and_flat_lists b/tests/cassettes/TestVehiclesIntegration.test_get_vehicle_supports_joiner_and_flat_lists index 56ba2da..a038144 100644 --- a/tests/cassettes/TestVehiclesIntegration.test_get_vehicle_supports_joiner_and_flat_lists +++ b/tests/cassettes/TestVehiclesIntegration.test_get_vehicle_supports_joiner_and_flat_lists @@ -2,40 +2,40 @@ interactions: - request: body: '' headers: - accept: + Accept: - '*/*' - accept-encoding: + Accept-Encoding: - gzip, deflate - connection: + Connection: - keep-alive - host: + Host: - tango.makegov.com - user-agent: + User-Agent: - python-httpx/0.28.1 method: GET - uri: https://tango.makegov.com/api/vehicles/?page=1&limit=1&shape=uuid%2Csolicitation_identifier%2Cis_synthetic_solicitation%2Cprogram_acronym%2Corganization_id%2Corganization%2Cvehicle_type%2Cdescription%2Cidv_count%2Cawardee_count%2Corder_count%2Ctotal_obligated%2Cvehicle_obligations%2Cvehicle_contracts_value%2Clatest_award_date%2Csolicitation_title%2Csolicitation_date + uri: https://tango.makegov.com/api/vehicles/?page=1&limit=1&shape=uuid%2Csolicitation_identifier%2Cis_synthetic_solicitation%2Cprogram_acronym%2Corganization_id%2Corganization%2Cvehicle_type%2Cdescription%2Cidv_count%2Cholder_count%2Corder_winner_count%2Cawardee_count%2Corder_count%2Ctotal_obligated%2Cvehicle_obligations%2Cvehicle_contracts_value%2Clatest_award_date%2Csolicitation_title%2Csolicitation_date response: body: - string: '{"count":20452,"next":"https://tango.makegov.com/api/vehicles/?limit=1&page=2&shape=uuid%2Csolicitation_identifier%2Cis_synthetic_solicitation%2Cprogram_acronym%2Corganization_id%2Corganization%2Cvehicle_type%2Cdescription%2Cidv_count%2Cawardee_count%2Corder_count%2Ctotal_obligated%2Cvehicle_obligations%2Cvehicle_contracts_value%2Clatest_award_date%2Csolicitation_title%2Csolicitation_date","previous":null,"results":[{"awardee_count":2,"description":["CATTLE + string: '{"count":22055,"next":"https://tango.makegov.com/api/vehicles/?limit=1&page=2&shape=uuid%2Csolicitation_identifier%2Cis_synthetic_solicitation%2Cprogram_acronym%2Corganization_id%2Corganization%2Cvehicle_type%2Cdescription%2Cidv_count%2Cholder_count%2Corder_winner_count%2Cawardee_count%2Corder_count%2Ctotal_obligated%2Cvehicle_obligations%2Cvehicle_contracts_value%2Clatest_award_date%2Csolicitation_title%2Csolicitation_date","previous":null,"results":[{"awardee_count":2,"description":["CATTLE AND SWINE BACKTAG CEMENT","CATTLE AND SWINE BACKTAG CEMENT TO BE DELIVERED - ON AN IDIQ BASIS TO KS, MO."],"idv_count":2,"is_synthetic_solicitation":false,"latest_award_date":"2006-06-01","order_count":25,"organization":{"organization_id":"767bb2b0-239a-5bb4-8f3c-16d0a418fb71","office_code":"126395","office_name":"MRPBS + ON AN IDIQ BASIS TO KS, MO."],"holder_count":2,"idv_count":2,"is_synthetic_solicitation":false,"latest_award_date":"2006-06-01","order_count":25,"order_winner_count":2,"organization":{"organization_id":"767bb2b0-239a-5bb4-8f3c-16d0a418fb71","office_code":"126395","office_name":"MRPBS MINNEAPOLIS MN","agency_code":"12K3","agency_name":"ANIMAL AND PLANT HEALTH INSPECTION SERVICE","department_code":"012","department_name":"AGRICULTURE, DEPARTMENT OF"},"organization_id":"767bb2b0-239a-5bb4-8f3c-16d0a418fb71","program_acronym":"APHIS - VS","solicitation_date":null,"solicitation_identifier":"002-M-APHIS-06","solicitation_title":null,"total_obligated":5388564.69,"uuid":"8597845d-2a4c-5acd-99ff-1f5fe348501e","vehicle_contracts_value":5116733.97,"vehicle_obligations":5388564.6899999995,"vehicle_type":{"code":"B","description":"IDC"}}]}' + VS","solicitation_date":null,"solicitation_identifier":"002-M-APHIS-06","solicitation_title":null,"total_obligated":5388564.69,"uuid":"8597845d-2a4c-5acd-99ff-1f5fe348501e","vehicle_contracts_value":5388564.6899999995,"vehicle_obligations":5388564.6899999995,"vehicle_type":{"code":"B","description":"IDC"}}]}' headers: CF-RAY: - - 9f73b81ebb963d59-JAX + - a447660dcefcf84d-ORD Connection: - keep-alive Content-Type: - application/json Date: - - Wed, 06 May 2026 00:02:59 GMT + - Fri, 02 Oct 2026 23:13:37 GMT Nel: - '{"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}' Report-To: - - '{"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=nlkDo84xSKlQqOxVMCULQpSFUr%2ByvNqk5clNAiAUG3P3v9GZj4sWYIijGnArPlv%2BaO9z%2B637EZfDn5VLkMykl6392hG%2BWNMYaI9%2B0cXLrEgfbcn12luHzYHEcVOIk2By9FZVYoJbO6CEhCeoeNzS"}]}' + - '{"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=AmrLIFxuKDudhcIWGN5N4ezSw2Qz5gPr%2F7KEKepEefWA2xsY7Y3QsVwCQ%2FU7BGTrlKIB8NXh3ZTJr7p9LaWJW1FnhLhUlearwN5jMAeEvUZORDa1NicaCMony9wC7CHNTeIaiBRKMRpOVf5dZ4VW"}]}' Server: - cloudflare Transfer-Encoding: @@ -45,7 +45,7 @@ interactions: cf-cache-status: - DYNAMIC content-length: - - '1333' + - '1417' cross-origin-opener-policy: - same-origin referrer-policy: @@ -55,44 +55,46 @@ interactions: x-content-type-options: - nosniff x-execution-time: - - 0.024s + - 0.033s x-frame-options: - DENY x-ratelimit-burst-limit: - '1000' x-ratelimit-burst-remaining: - - '986' + - '989' x-ratelimit-burst-reset: - - '29' + - '37' x-ratelimit-daily-limit: - '2000000' x-ratelimit-daily-remaining: - - '1999986' + - '1997193' x-ratelimit-daily-reset: - - '86220' + - '2782' x-ratelimit-limit: - '1000' x-ratelimit-remaining: - - '986' + - '989' x-ratelimit-reset: - - '29' + - '37' x-results-counttype: - exact + x-tango-api-version: + - 5.8.0 status: code: 200 message: OK - request: body: '' headers: - accept: + Accept: - '*/*' - accept-encoding: + Accept-Encoding: - gzip, deflate - connection: + Connection: - keep-alive - host: + Host: - tango.makegov.com - user-agent: + User-Agent: - python-httpx/0.28.1 method: GET uri: https://tango.makegov.com/api/vehicles/8597845d-2a4c-5acd-99ff-1f5fe348501e/?shape=uuid%2Corganization&flat=true&joiner=__&flat_lists=true @@ -104,17 +106,17 @@ interactions: DEPARTMENT OF","uuid":"8597845d-2a4c-5acd-99ff-1f5fe348501e"}' headers: CF-RAY: - - 9f73b81f5ca93d59-JAX + - a447660f989b1910-ORD Connection: - keep-alive Content-Type: - application/json Date: - - Wed, 06 May 2026 00:02:59 GMT + - Fri, 02 Oct 2026 23:13:37 GMT Nel: - '{"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}' Report-To: - - '{"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=CqJJ85Cgv80%2Fz2c7k61dXKeYrVFFz8RUxhtcsY3j86jFwjPcYo7xcPBjBH5cyohJxE%2FWeS%2Bdy2YWh1tWkStjis8jta9f%2BGiiyKyRqvQ3Zb3kzqFQwTGjXnTMPTW%2FNrzQ8shECys8DGoRPOZnWOab"}]}' + - '{"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=Dh5eo3m5%2Bhp8A56KhBrB659PGcdvM13ZcVQnL4r4ppR5M%2BtlrC0iiCW%2BrCISCEKnnu6IXNYzUui2P5rexhv0ZofkM9shRcr2lLoxc5k8p8DTSeHf7xJL6W9RkwRasgfvH%2BinRMjlzsNyj80d2msP"}]}' Server: - cloudflare Transfer-Encoding: @@ -134,27 +136,29 @@ interactions: x-content-type-options: - nosniff x-execution-time: - - 0.016s + - 0.021s x-frame-options: - DENY x-ratelimit-burst-limit: - '1000' x-ratelimit-burst-remaining: - - '985' + - '988' x-ratelimit-burst-reset: - - '29' + - '36' x-ratelimit-daily-limit: - '2000000' x-ratelimit-daily-remaining: - - '1999985' + - '1997192' x-ratelimit-daily-reset: - - '86220' + - '2782' x-ratelimit-limit: - '1000' x-ratelimit-remaining: - - '985' + - '988' x-ratelimit-reset: - - '29' + - '36' + x-tango-api-version: + - 5.8.0 status: code: 200 message: OK diff --git a/tests/cassettes/TestVehiclesIntegration.test_get_vehicle_with_metrics_expansion b/tests/cassettes/TestVehiclesIntegration.test_get_vehicle_with_metrics_expansion index f06f0e0..4a573b2 100644 --- a/tests/cassettes/TestVehiclesIntegration.test_get_vehicle_with_metrics_expansion +++ b/tests/cassettes/TestVehiclesIntegration.test_get_vehicle_with_metrics_expansion @@ -2,40 +2,40 @@ interactions: - request: body: '' headers: - accept: + Accept: - '*/*' - accept-encoding: + Accept-Encoding: - gzip, deflate - connection: + Connection: - keep-alive - host: + Host: - tango.makegov.com - user-agent: + User-Agent: - python-httpx/0.28.1 method: GET - uri: https://tango.makegov.com/api/vehicles/?page=1&limit=1&shape=uuid%2Csolicitation_identifier%2Cis_synthetic_solicitation%2Cprogram_acronym%2Corganization_id%2Corganization%2Cvehicle_type%2Cdescription%2Cidv_count%2Cawardee_count%2Corder_count%2Ctotal_obligated%2Cvehicle_obligations%2Cvehicle_contracts_value%2Clatest_award_date%2Csolicitation_title%2Csolicitation_date + uri: https://tango.makegov.com/api/vehicles/?page=1&limit=1&shape=uuid%2Csolicitation_identifier%2Cis_synthetic_solicitation%2Cprogram_acronym%2Corganization_id%2Corganization%2Cvehicle_type%2Cdescription%2Cidv_count%2Cholder_count%2Corder_winner_count%2Cawardee_count%2Corder_count%2Ctotal_obligated%2Cvehicle_obligations%2Cvehicle_contracts_value%2Clatest_award_date%2Csolicitation_title%2Csolicitation_date response: body: - string: '{"count":20452,"next":"https://tango.makegov.com/api/vehicles/?limit=1&page=2&shape=uuid%2Csolicitation_identifier%2Cis_synthetic_solicitation%2Cprogram_acronym%2Corganization_id%2Corganization%2Cvehicle_type%2Cdescription%2Cidv_count%2Cawardee_count%2Corder_count%2Ctotal_obligated%2Cvehicle_obligations%2Cvehicle_contracts_value%2Clatest_award_date%2Csolicitation_title%2Csolicitation_date","previous":null,"results":[{"awardee_count":2,"description":["CATTLE + string: '{"count":22055,"next":"https://tango.makegov.com/api/vehicles/?limit=1&page=2&shape=uuid%2Csolicitation_identifier%2Cis_synthetic_solicitation%2Cprogram_acronym%2Corganization_id%2Corganization%2Cvehicle_type%2Cdescription%2Cidv_count%2Cholder_count%2Corder_winner_count%2Cawardee_count%2Corder_count%2Ctotal_obligated%2Cvehicle_obligations%2Cvehicle_contracts_value%2Clatest_award_date%2Csolicitation_title%2Csolicitation_date","previous":null,"results":[{"awardee_count":2,"description":["CATTLE AND SWINE BACKTAG CEMENT","CATTLE AND SWINE BACKTAG CEMENT TO BE DELIVERED - ON AN IDIQ BASIS TO KS, MO."],"idv_count":2,"is_synthetic_solicitation":false,"latest_award_date":"2006-06-01","order_count":25,"organization":{"organization_id":"767bb2b0-239a-5bb4-8f3c-16d0a418fb71","office_code":"126395","office_name":"MRPBS + ON AN IDIQ BASIS TO KS, MO."],"holder_count":2,"idv_count":2,"is_synthetic_solicitation":false,"latest_award_date":"2006-06-01","order_count":25,"order_winner_count":2,"organization":{"organization_id":"767bb2b0-239a-5bb4-8f3c-16d0a418fb71","office_code":"126395","office_name":"MRPBS MINNEAPOLIS MN","agency_code":"12K3","agency_name":"ANIMAL AND PLANT HEALTH INSPECTION SERVICE","department_code":"012","department_name":"AGRICULTURE, DEPARTMENT OF"},"organization_id":"767bb2b0-239a-5bb4-8f3c-16d0a418fb71","program_acronym":"APHIS - VS","solicitation_date":null,"solicitation_identifier":"002-M-APHIS-06","solicitation_title":null,"total_obligated":5388564.69,"uuid":"8597845d-2a4c-5acd-99ff-1f5fe348501e","vehicle_contracts_value":5116733.97,"vehicle_obligations":5388564.6899999995,"vehicle_type":{"code":"B","description":"IDC"}}]}' + VS","solicitation_date":null,"solicitation_identifier":"002-M-APHIS-06","solicitation_title":null,"total_obligated":5388564.69,"uuid":"8597845d-2a4c-5acd-99ff-1f5fe348501e","vehicle_contracts_value":5388564.6899999995,"vehicle_obligations":5388564.6899999995,"vehicle_type":{"code":"B","description":"IDC"}}]}' headers: CF-RAY: - - 9f73b823692c60c7-JAX + - a44766154de3123a-ORD Connection: - keep-alive Content-Type: - application/json Date: - - Wed, 06 May 2026 00:02:59 GMT + - Fri, 02 Oct 2026 23:13:38 GMT Nel: - '{"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}' Report-To: - - '{"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=B6gMSdTzCoCyerbzAHIcVlqBefWD2yJM28l29mzuR4ye3cO5QBChXu%2Foof465c8FHkZe8jIIWNe9U9rJfvAMpvgPgzx8eLhyJYVdac5U3d9XyF0qKbxJt58%2FMsn51P4CcUG49wsHDkNwLfd7N8qo"}]}' + - '{"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=WC5DlXnrN1iQxaM1il4uCMfwOhz9JnJCMqAkDhrEg0gj4jiG3codMj8aBvSrqzESYlXFxQy4RyjYaANM7zRdXMVaxhMGuijsaMDEQ%2Bzl6XCogz8IL%2FLnsOzSGg5v4QllWCS7u5LeLbIaan2%2F%2BI5E"}]}' Server: - cloudflare Transfer-Encoding: @@ -45,7 +45,7 @@ interactions: cf-cache-status: - DYNAMIC content-length: - - '1333' + - '1417' cross-origin-opener-policy: - same-origin referrer-policy: @@ -55,63 +55,65 @@ interactions: x-content-type-options: - nosniff x-execution-time: - - 0.021s + - 0.029s x-frame-options: - DENY x-ratelimit-burst-limit: - '1000' x-ratelimit-burst-remaining: - - '981' + - '985' x-ratelimit-burst-reset: - - '28' + - '35' x-ratelimit-daily-limit: - '2000000' x-ratelimit-daily-remaining: - - '1999981' + - '1997189' x-ratelimit-daily-reset: - - '86220' + - '2781' x-ratelimit-limit: - '1000' x-ratelimit-remaining: - - '981' + - '985' x-ratelimit-reset: - - '28' + - '35' x-results-counttype: - exact + x-tango-api-version: + - 5.8.0 status: code: 200 message: OK - request: body: '' headers: - accept: + Accept: - '*/*' - accept-encoding: + Accept-Encoding: - gzip, deflate - connection: + Connection: - keep-alive - host: + Host: - tango.makegov.com - user-agent: + User-Agent: - python-httpx/0.28.1 method: GET uri: https://tango.makegov.com/api/vehicles/8597845d-2a4c-5acd-99ff-1f5fe348501e/?shape=uuid%2Cmetrics%28%2A%29 response: body: - string: '{"metrics":{"avg_offers_received":1.5,"award_concentration_hhi":6058.0,"order_concentration_hhi":5200.0,"competed_rate":0.88,"using_agency_count":1,"avg_order_value":215542.58759999997,"max_order_value":602601.6,"top_recipient_share":72.99,"recent_obligations_24mo":0.0,"recent_orders_24mo":0,"days_since_last_order":5710,"obligation_to_ceiling_ratio":1.053125826277812},"uuid":"8597845d-2a4c-5acd-99ff-1f5fe348501e"}' + string: '{"metrics":{"avg_offers_received":1.5,"award_concentration_hhi":6058.0,"order_concentration_hhi":5200.0,"competed_rate":0.88,"using_agency_count":1,"avg_order_value":215542.58759999997,"max_order_value":602601.6,"top_recipient_share":72.99,"recent_obligations_24mo":0.0,"recent_orders_24mo":0,"days_since_last_order":5860,"obligation_to_ceiling_ratio":1.0},"uuid":"8597845d-2a4c-5acd-99ff-1f5fe348501e"}' headers: CF-RAY: - - 9f73b823da9360c7-JAX + - a4476616fea66195-ORD Connection: - keep-alive Content-Type: - application/json Date: - - Wed, 06 May 2026 00:02:59 GMT + - Fri, 02 Oct 2026 23:13:38 GMT Nel: - '{"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}' Report-To: - - '{"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=5i%2Bk54VkK%2FXROY20rDQl9Rsx8mWgHA2Cn8jk3aUms2rC%2FpUJW8g4ecY5n8OZlTXhCF%2B5a0kpjUoAXs7btqOqBrmtTDnAaKNTjRYKpz72at%2Bbcu8K%2BCcopKM7zRf7KdNL9q9hPXB01yre8vUVrCJ0"}]}' + - '{"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=idj%2FtMJqyNQN4yuAEUAi%2BA48E6G8np2OT48Z7jox%2FxcbhwLF6%2BvnucPWD8ThtMHngHLhWhI6Ikz8eivtHTPKgLf4610C2R0bEzGEK7tHn4QBkA%2F7RktYDQCZHwK1JucbFwXA98ED0WZmyJ1EFe%2BX"}]}' Server: - cloudflare Transfer-Encoding: @@ -121,7 +123,7 @@ interactions: cf-cache-status: - DYNAMIC content-length: - - '417' + - '403' cross-origin-opener-policy: - same-origin referrer-policy: @@ -131,27 +133,29 @@ interactions: x-content-type-options: - nosniff x-execution-time: - - 0.016s + - 0.020s x-frame-options: - DENY x-ratelimit-burst-limit: - '1000' x-ratelimit-burst-remaining: - - '980' + - '984' x-ratelimit-burst-reset: - - '28' + - '35' x-ratelimit-daily-limit: - '2000000' x-ratelimit-daily-remaining: - - '1999980' + - '1997188' x-ratelimit-daily-reset: - - '86220' + - '2781' x-ratelimit-limit: - '1000' x-ratelimit-remaining: - - '980' + - '984' x-ratelimit-reset: - - '28' + - '35' + x-tango-api-version: + - 5.8.0 status: code: 200 message: OK diff --git a/tests/cassettes/TestVehiclesIntegration.test_list_vehicle_awardees_uses_default_shape b/tests/cassettes/TestVehiclesIntegration.test_list_vehicle_awardees_uses_default_shape index bdffcb9..9c9e3c0 100644 --- a/tests/cassettes/TestVehiclesIntegration.test_list_vehicle_awardees_uses_default_shape +++ b/tests/cassettes/TestVehiclesIntegration.test_list_vehicle_awardees_uses_default_shape @@ -2,40 +2,40 @@ interactions: - request: body: '' headers: - accept: + Accept: - '*/*' - accept-encoding: + Accept-Encoding: - gzip, deflate - connection: + Connection: - keep-alive - host: + Host: - tango.makegov.com - user-agent: + User-Agent: - python-httpx/0.28.1 method: GET - uri: https://tango.makegov.com/api/vehicles/?page=1&limit=1&shape=uuid%2Csolicitation_identifier%2Cis_synthetic_solicitation%2Cprogram_acronym%2Corganization_id%2Corganization%2Cvehicle_type%2Cdescription%2Cidv_count%2Cawardee_count%2Corder_count%2Ctotal_obligated%2Cvehicle_obligations%2Cvehicle_contracts_value%2Clatest_award_date%2Csolicitation_title%2Csolicitation_date + uri: https://tango.makegov.com/api/vehicles/?page=1&limit=1&shape=uuid%2Csolicitation_identifier%2Cis_synthetic_solicitation%2Cprogram_acronym%2Corganization_id%2Corganization%2Cvehicle_type%2Cdescription%2Cidv_count%2Cholder_count%2Corder_winner_count%2Cawardee_count%2Corder_count%2Ctotal_obligated%2Cvehicle_obligations%2Cvehicle_contracts_value%2Clatest_award_date%2Csolicitation_title%2Csolicitation_date response: body: - string: '{"count":20452,"next":"https://tango.makegov.com/api/vehicles/?limit=1&page=2&shape=uuid%2Csolicitation_identifier%2Cis_synthetic_solicitation%2Cprogram_acronym%2Corganization_id%2Corganization%2Cvehicle_type%2Cdescription%2Cidv_count%2Cawardee_count%2Corder_count%2Ctotal_obligated%2Cvehicle_obligations%2Cvehicle_contracts_value%2Clatest_award_date%2Csolicitation_title%2Csolicitation_date","previous":null,"results":[{"awardee_count":2,"description":["CATTLE + string: '{"count":22055,"next":"https://tango.makegov.com/api/vehicles/?limit=1&page=2&shape=uuid%2Csolicitation_identifier%2Cis_synthetic_solicitation%2Cprogram_acronym%2Corganization_id%2Corganization%2Cvehicle_type%2Cdescription%2Cidv_count%2Cholder_count%2Corder_winner_count%2Cawardee_count%2Corder_count%2Ctotal_obligated%2Cvehicle_obligations%2Cvehicle_contracts_value%2Clatest_award_date%2Csolicitation_title%2Csolicitation_date","previous":null,"results":[{"awardee_count":2,"description":["CATTLE AND SWINE BACKTAG CEMENT","CATTLE AND SWINE BACKTAG CEMENT TO BE DELIVERED - ON AN IDIQ BASIS TO KS, MO."],"idv_count":2,"is_synthetic_solicitation":false,"latest_award_date":"2006-06-01","order_count":25,"organization":{"organization_id":"767bb2b0-239a-5bb4-8f3c-16d0a418fb71","office_code":"126395","office_name":"MRPBS + ON AN IDIQ BASIS TO KS, MO."],"holder_count":2,"idv_count":2,"is_synthetic_solicitation":false,"latest_award_date":"2006-06-01","order_count":25,"order_winner_count":2,"organization":{"organization_id":"767bb2b0-239a-5bb4-8f3c-16d0a418fb71","office_code":"126395","office_name":"MRPBS MINNEAPOLIS MN","agency_code":"12K3","agency_name":"ANIMAL AND PLANT HEALTH INSPECTION SERVICE","department_code":"012","department_name":"AGRICULTURE, DEPARTMENT OF"},"organization_id":"767bb2b0-239a-5bb4-8f3c-16d0a418fb71","program_acronym":"APHIS - VS","solicitation_date":null,"solicitation_identifier":"002-M-APHIS-06","solicitation_title":null,"total_obligated":5388564.69,"uuid":"8597845d-2a4c-5acd-99ff-1f5fe348501e","vehicle_contracts_value":5116733.97,"vehicle_obligations":5388564.6899999995,"vehicle_type":{"code":"B","description":"IDC"}}]}' + VS","solicitation_date":null,"solicitation_identifier":"002-M-APHIS-06","solicitation_title":null,"total_obligated":5388564.69,"uuid":"8597845d-2a4c-5acd-99ff-1f5fe348501e","vehicle_contracts_value":5388564.6899999995,"vehicle_obligations":5388564.6899999995,"vehicle_type":{"code":"B","description":"IDC"}}]}' headers: CF-RAY: - - 9f73b82028e92733-JAX + - a447661149f8356f-ORD Connection: - keep-alive Content-Type: - application/json Date: - - Wed, 06 May 2026 00:02:59 GMT + - Fri, 02 Oct 2026 23:13:37 GMT Nel: - '{"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}' Report-To: - - '{"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=pb6L38IhrE8slcKjDmpMOoPMm4XFe4ByVQdtJXbaKHCLmJmZg4mj8VaQO%2F1v7gOmIbL9H3TNqGXF7WPcULg3j8haT%2B%2FMMkOVPve4NgEzKZxAJL8XFw9Oklv86aTGvrYJyH8zq39%2BOrnMHDI0S5g0"}]}' + - '{"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=rQQsdvPmd9lRX4nYEAfKcutngJU%2BcS%2F%2FKE3A3KX5VaGErfSoOlptQYk7m0uWRnP7H9PdHdKwQ3cIX%2FHaB02dc24tyCn7EglEMLuBM90z2ezdtKnMEJTJ1SN5GzIW0WAtCqc2YtYMHeZQ9e1gHf0H"}]}' Server: - cloudflare Transfer-Encoding: @@ -45,7 +45,7 @@ interactions: cf-cache-status: - DYNAMIC content-length: - - '1333' + - '1417' cross-origin-opener-policy: - same-origin referrer-policy: @@ -55,66 +55,68 @@ interactions: x-content-type-options: - nosniff x-execution-time: - - 0.022s + - 0.029s x-frame-options: - DENY x-ratelimit-burst-limit: - '1000' x-ratelimit-burst-remaining: - - '984' + - '987' x-ratelimit-burst-reset: - - '29' + - '36' x-ratelimit-daily-limit: - '2000000' x-ratelimit-daily-remaining: - - '1999984' + - '1997191' x-ratelimit-daily-reset: - - '86220' + - '2782' x-ratelimit-limit: - '1000' x-ratelimit-remaining: - - '984' + - '987' x-ratelimit-reset: - - '29' + - '36' x-results-counttype: - exact + x-tango-api-version: + - 5.8.0 status: code: 200 message: OK - request: body: '' headers: - accept: + Accept: - '*/*' - accept-encoding: + Accept-Encoding: - gzip, deflate - connection: + Connection: - keep-alive - host: + Host: - tango.makegov.com - user-agent: + User-Agent: - python-httpx/0.28.1 method: GET uri: https://tango.makegov.com/api/vehicles/8597845d-2a4c-5acd-99ff-1f5fe348501e/awardees/?page=1&limit=10&shape=uuid%2Ckey%2Cpiid%2Caward_date%2Ctitle%2Corder_count%2Cidv_obligations%2Cidv_contracts_value%2Crecipient%28display_name%2Cuei%29 response: body: - string: '{"count":2,"next":null,"previous":null,"results":[{"award_date":"2006-06-01","idv_contracts_value":1183372.8,"idv_obligations":1455203.52,"key":"CONT_IDV_AG6395C060018_12K3","order_count":10,"piid":"AG6395C060018","recipient":{"uei":"GDVZPLNAKLL9","display_name":"STEVEN - INDUSTRIES INC"},"title":"CATTLE AND SWINE BACKTAG CEMENT","uuid":"af5f3527-b51b-55d8-9c6f-2d6aad936d31"},{"award_date":"2006-06-01","idv_contracts_value":3933361.17,"idv_obligations":3933361.17,"key":"CONT_IDV_AG6395C060019_12K3","order_count":15,"piid":"AG6395C060019","recipient":{"uei":"C1D7UA31LAK8","display_name":"M - J RUSCOE"},"title":"CATTLE AND SWINE BACKTAG CEMENT TO BE DELIVERED ON AN - IDIQ BASIS TO KS, MO.","uuid":"55cdcfa5-9b94-5aa5-8a8b-7a291d675e20"}]}' + string: '{"count":2,"next":null,"previous":null,"results":[{"award_date":"2006-06-01","idv_contracts_value":1455203.52,"idv_obligations":1455203.52,"key":"CONT_IDV_AG6395C060018_12K3","order_count":10,"piid":"AG6395C060018","recipient":{"uei":"GDVZPLNAKLL9","display_name":"STEVEN + INDUSTRIES INC"},"title":"CATTLE AND SWINE BACKTAG CEMENT","uuid":"af5f3527-b51b-55d8-9c6f-2d6aad936d31"},{"award_date":"2006-06-01","idv_contracts_value":3933361.17,"idv_obligations":3933361.17,"key":"CONT_IDV_AG6395C060019_12K3","order_count":15,"piid":"AG6395C060019","recipient":{"uei":"C1D7UA31LAK8","display_name":"THE + RUSCOE COMPANY"},"title":"CATTLE AND SWINE BACKTAG CEMENT TO BE DELIVERED + ON AN IDIQ BASIS TO KS, MO.","uuid":"55cdcfa5-9b94-5aa5-8a8b-7a291d675e20"}]}' headers: CF-RAY: - - 9f73b820ba5d2733-JAX + - a4476612acdc3215-ORD Connection: - keep-alive Content-Type: - application/json Date: - - Wed, 06 May 2026 00:02:59 GMT + - Fri, 02 Oct 2026 23:13:37 GMT Nel: - '{"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}' Report-To: - - '{"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=Hhdv2%2B3QcWBaFBmrjpPppmB%2BWUA7Qs%2FTsc05%2BmgouFx8U5esHFgTLVxRQMHjK7htLjAT4aI7s2cu43j1IjRqN8P%2FhFHLKq4yMnqrZ%2B3zionLGPhJFQ%2FVbIiaNsVRBsuCRRHzED8Mq%2F%2FohxH5q62o"}]}' + - '{"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=9xeSJNQHDn4SA1wE9XN4NckxUxulBtJjrpG4roy%2Fvsp86YQRPyc0phw24LqaMCGPHj9jIawkrD%2B8PvJOHxSze%2FoNUUT4DGUFg%2BF3NYtwswTwB92XY6dchIFjpUf3NoCfYBpGXDRKePjr4gEHww7t"}]}' Server: - cloudflare Transfer-Encoding: @@ -124,7 +126,7 @@ interactions: cf-cache-status: - DYNAMIC content-length: - - '739' + - '748' cross-origin-opener-policy: - same-origin referrer-policy: @@ -134,27 +136,29 @@ interactions: x-content-type-options: - nosniff x-execution-time: - - 0.036s + - 0.038s x-frame-options: - DENY x-ratelimit-burst-limit: - '1000' x-ratelimit-burst-remaining: - - '983' + - '986' x-ratelimit-burst-reset: - - '29' + - '36' x-ratelimit-daily-limit: - '2000000' x-ratelimit-daily-remaining: - - '1999983' + - '1997190' x-ratelimit-daily-reset: - - '86220' + - '2782' x-ratelimit-limit: - '1000' x-ratelimit-remaining: - - '983' + - '986' x-ratelimit-reset: - - '29' + - '36' + x-tango-api-version: + - 5.8.0 status: code: 200 message: OK diff --git a/tests/cassettes/TestVehiclesIntegration.test_list_vehicle_orders_uses_default_shape b/tests/cassettes/TestVehiclesIntegration.test_list_vehicle_orders_uses_default_shape index 5bda308..63fda1b 100644 --- a/tests/cassettes/TestVehiclesIntegration.test_list_vehicle_orders_uses_default_shape +++ b/tests/cassettes/TestVehiclesIntegration.test_list_vehicle_orders_uses_default_shape @@ -2,40 +2,40 @@ interactions: - request: body: '' headers: - accept: + Accept: - '*/*' - accept-encoding: + Accept-Encoding: - gzip, deflate - connection: + Connection: - keep-alive - host: + Host: - tango.makegov.com - user-agent: + User-Agent: - python-httpx/0.28.1 method: GET - uri: https://tango.makegov.com/api/vehicles/?page=1&limit=1&shape=uuid%2Csolicitation_identifier%2Cis_synthetic_solicitation%2Cprogram_acronym%2Corganization_id%2Corganization%2Cvehicle_type%2Cdescription%2Cidv_count%2Cawardee_count%2Corder_count%2Ctotal_obligated%2Cvehicle_obligations%2Cvehicle_contracts_value%2Clatest_award_date%2Csolicitation_title%2Csolicitation_date + uri: https://tango.makegov.com/api/vehicles/?page=1&limit=1&shape=uuid%2Csolicitation_identifier%2Cis_synthetic_solicitation%2Cprogram_acronym%2Corganization_id%2Corganization%2Cvehicle_type%2Cdescription%2Cidv_count%2Cholder_count%2Corder_winner_count%2Cawardee_count%2Corder_count%2Ctotal_obligated%2Cvehicle_obligations%2Cvehicle_contracts_value%2Clatest_award_date%2Csolicitation_title%2Csolicitation_date response: body: - string: '{"count":20452,"next":"https://tango.makegov.com/api/vehicles/?limit=1&page=2&shape=uuid%2Csolicitation_identifier%2Cis_synthetic_solicitation%2Cprogram_acronym%2Corganization_id%2Corganization%2Cvehicle_type%2Cdescription%2Cidv_count%2Cawardee_count%2Corder_count%2Ctotal_obligated%2Cvehicle_obligations%2Cvehicle_contracts_value%2Clatest_award_date%2Csolicitation_title%2Csolicitation_date","previous":null,"results":[{"awardee_count":2,"description":["CATTLE + string: '{"count":22055,"next":"https://tango.makegov.com/api/vehicles/?limit=1&page=2&shape=uuid%2Csolicitation_identifier%2Cis_synthetic_solicitation%2Cprogram_acronym%2Corganization_id%2Corganization%2Cvehicle_type%2Cdescription%2Cidv_count%2Cholder_count%2Corder_winner_count%2Cawardee_count%2Corder_count%2Ctotal_obligated%2Cvehicle_obligations%2Cvehicle_contracts_value%2Clatest_award_date%2Csolicitation_title%2Csolicitation_date","previous":null,"results":[{"awardee_count":2,"description":["CATTLE AND SWINE BACKTAG CEMENT","CATTLE AND SWINE BACKTAG CEMENT TO BE DELIVERED - ON AN IDIQ BASIS TO KS, MO."],"idv_count":2,"is_synthetic_solicitation":false,"latest_award_date":"2006-06-01","order_count":25,"organization":{"organization_id":"767bb2b0-239a-5bb4-8f3c-16d0a418fb71","office_code":"126395","office_name":"MRPBS + ON AN IDIQ BASIS TO KS, MO."],"holder_count":2,"idv_count":2,"is_synthetic_solicitation":false,"latest_award_date":"2006-06-01","order_count":25,"order_winner_count":2,"organization":{"organization_id":"767bb2b0-239a-5bb4-8f3c-16d0a418fb71","office_code":"126395","office_name":"MRPBS MINNEAPOLIS MN","agency_code":"12K3","agency_name":"ANIMAL AND PLANT HEALTH INSPECTION SERVICE","department_code":"012","department_name":"AGRICULTURE, DEPARTMENT OF"},"organization_id":"767bb2b0-239a-5bb4-8f3c-16d0a418fb71","program_acronym":"APHIS - VS","solicitation_date":null,"solicitation_identifier":"002-M-APHIS-06","solicitation_title":null,"total_obligated":5388564.69,"uuid":"8597845d-2a4c-5acd-99ff-1f5fe348501e","vehicle_contracts_value":5116733.97,"vehicle_obligations":5388564.6899999995,"vehicle_type":{"code":"B","description":"IDC"}}]}' + VS","solicitation_date":null,"solicitation_identifier":"002-M-APHIS-06","solicitation_title":null,"total_obligated":5388564.69,"uuid":"8597845d-2a4c-5acd-99ff-1f5fe348501e","vehicle_contracts_value":5388564.6899999995,"vehicle_obligations":5388564.6899999995,"vehicle_type":{"code":"B","description":"IDC"}}]}' headers: CF-RAY: - - 9f73b824ba669934-JAX + - a4476618dde8f852-ORD Connection: - keep-alive Content-Type: - application/json Date: - - Wed, 06 May 2026 00:03:00 GMT + - Fri, 02 Oct 2026 23:13:38 GMT Nel: - '{"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}' Report-To: - - '{"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=AUn0qs38WwHOJZc2XMWR%2Bht6rOF8JGHTzt7H7Onn63UyHktmeiTCsvGECYxGJXUDVPZvvj%2FJkaol61cuC3dERnJJPBnV9ZzOkYSZzTB9cUsxcgF4Zbtq2gGEq0BiVAVqMTEb%2BC6U5WlFbqjvDxHC"}]}' + - '{"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=10WVJ4gWTQdyf8z0ZrF95HBnbsMFMACxSl6oKk3Pc1jb17uwMgayiDxooYaFT76B3kP43iI%2Bs6YocqhiwYygHTi8k7DBEKAUmlGtsFKIQnmF0tUfZ4Cp9R47JITDiAF2%2FxyFCFqHgNbTvGekU66U"}]}' Server: - cloudflare Transfer-Encoding: @@ -45,7 +45,7 @@ interactions: cf-cache-status: - DYNAMIC content-length: - - '1333' + - '1417' cross-origin-opener-policy: - same-origin referrer-policy: @@ -55,87 +55,89 @@ interactions: x-content-type-options: - nosniff x-execution-time: - - 0.040s + - 0.030s x-frame-options: - DENY x-ratelimit-burst-limit: - '1000' x-ratelimit-burst-remaining: - - '979' + - '983' x-ratelimit-burst-reset: - - '28' + - '35' x-ratelimit-daily-limit: - '2000000' x-ratelimit-daily-remaining: - - '1999979' + - '1997187' x-ratelimit-daily-reset: - - '86219' + - '2781' x-ratelimit-limit: - '1000' x-ratelimit-remaining: - - '979' + - '983' x-ratelimit-reset: - - '28' + - '35' x-results-counttype: - exact + x-tango-api-version: + - 5.8.0 status: code: 200 message: OK - request: body: '' headers: - accept: + Accept: - '*/*' - accept-encoding: + Accept-Encoding: - gzip, deflate - connection: + Connection: - keep-alive - host: + Host: - tango.makegov.com - user-agent: + User-Agent: - python-httpx/0.28.1 method: GET uri: https://tango.makegov.com/api/vehicles/8597845d-2a4c-5acd-99ff-1f5fe348501e/orders/?page=1&limit=10&shape=key%2Cpiid%2Caward_date%2Cobligated%2Ctotal_contract_value%2Cdescription%2Crecipient%28display_name%2Cuei%29 response: body: string: '{"count":25,"next":"https://tango.makegov.com/api/vehicles/8597845d-2a4c-5acd-99ff-1f5fe348501e/orders/?limit=10&page=2&shape=key%2Cpiid%2Caward_date%2Cobligated%2Ctotal_contract_value%2Cdescription%2Crecipient%28display_name%2Cuei%29","previous":null,"results":[{"award_date":"2010-09-16","description":"DELIVERY - ORDER FOR BACKTAG CEMENT.","key":"CONT_AWD_AG6395D100682_12K3_AG6395C060019_12K3","obligated":399827.2,"piid":"AG6395D100682","recipient":{"uei":"C1D7UA31LAK8","display_name":"M - J RUSCOE"},"total_contract_value":399827.2},{"award_date":"2010-08-03","description":"BACKTAG - CEMENT IN TUBES","key":"CONT_AWD_AG6395D100569_12K3_AG6395C060019_12K3","obligated":236160.0,"piid":"AG6395D100569","recipient":{"uei":"C1D7UA31LAK8","display_name":"M - J RUSCOE"},"total_contract_value":236160.0},{"award_date":"2010-03-17","description":"DELIVERY - ORDER FOR BACKTAG CEMENT.","key":"CONT_AWD_AG6395D100331_12K3_AG6395C060019_12K3","obligated":602601.6,"piid":"AG6395D100331","recipient":{"uei":"C1D7UA31LAK8","display_name":"M - J RUSCOE"},"total_contract_value":602601.6},{"award_date":"2009-12-16","description":"DELIVERY - ORDER FOR BACKTAG CEMENT.","key":"CONT_AWD_AG6395D100186_12K3_AG6395C060019_12K3","obligated":101683.2,"piid":"AG6395D100186","recipient":{"uei":"C1D7UA31LAK8","display_name":"M - J RUSCOE"},"total_contract_value":101683.2},{"award_date":"2009-08-04","description":"DELIVERY - ORDER FOR CLN#10, #11, #12 BACKTAG CEMENT IN TUBE, PINT, QUART SIZE CONTAINERS","key":"CONT_AWD_AG6395D090553_12K3_AG6395C060019_12K3","obligated":431080.0,"piid":"AG6395D090553","recipient":{"uei":"C1D7UA31LAK8","display_name":"M - J RUSCOE"},"total_contract_value":431080.0},{"award_date":"2009-04-23","description":"RUSCOE + ORDER FOR BACKTAG CEMENT.","key":"CONT_AWD_AG6395D100682_12K3_AG6395C060019_12K3","obligated":399827.2,"piid":"AG6395D100682","recipient":{"uei":"C1D7UA31LAK8","display_name":"THE + RUSCOE COMPANY"},"total_contract_value":399827.2},{"award_date":"2010-08-03","description":"BACKTAG + CEMENT IN TUBES","key":"CONT_AWD_AG6395D100569_12K3_AG6395C060019_12K3","obligated":236160.0,"piid":"AG6395D100569","recipient":{"uei":"C1D7UA31LAK8","display_name":"THE + RUSCOE COMPANY"},"total_contract_value":236160.0},{"award_date":"2010-03-17","description":"DELIVERY + ORDER FOR BACKTAG CEMENT.","key":"CONT_AWD_AG6395D100331_12K3_AG6395C060019_12K3","obligated":602601.6,"piid":"AG6395D100331","recipient":{"uei":"C1D7UA31LAK8","display_name":"THE + RUSCOE COMPANY"},"total_contract_value":602601.6},{"award_date":"2009-12-16","description":"DELIVERY + ORDER FOR BACKTAG CEMENT.","key":"CONT_AWD_AG6395D100186_12K3_AG6395C060019_12K3","obligated":101683.2,"piid":"AG6395D100186","recipient":{"uei":"C1D7UA31LAK8","display_name":"THE + RUSCOE COMPANY"},"total_contract_value":101683.2},{"award_date":"2009-08-04","description":"DELIVERY + ORDER FOR CLN#10, #11, #12 BACKTAG CEMENT IN TUBE, PINT, QUART SIZE CONTAINERS","key":"CONT_AWD_AG6395D090553_12K3_AG6395C060019_12K3","obligated":431080.0,"piid":"AG6395D090553","recipient":{"uei":"C1D7UA31LAK8","display_name":"THE + RUSCOE COMPANY"},"total_contract_value":431080.0},{"award_date":"2009-04-23","description":"RUSCOE MFG CTR#AG6395C060019, DELIVERY ORDER FOR CLN#10, #11, #12 BACKTAG CEMENT - IN TUBE, PINT, QUART SIZE CONTAINERS","key":"CONT_AWD_AG6395D090363_12K3_AG6395C060019_12K3","obligated":431080.0,"piid":"AG6395D090363","recipient":{"uei":"C1D7UA31LAK8","display_name":"M - J RUSCOE"},"total_contract_value":431080.0},{"award_date":"2008-10-23","description":"RUSCOE + IN TUBE, PINT, QUART SIZE CONTAINERS","key":"CONT_AWD_AG6395D090363_12K3_AG6395C060019_12K3","obligated":431080.0,"piid":"AG6395D090363","recipient":{"uei":"C1D7UA31LAK8","display_name":"THE + RUSCOE COMPANY"},"total_contract_value":431080.0},{"award_date":"2008-10-23","description":"RUSCOE MFG CTR#AG6395C060019, DELIVERY ORDER FOR CLN#10, #11, #12 BACKTAG CEMENT - IN TUBE, PINT, QUART SIZE CONTAINERS","key":"CONT_AWD_AG6395D090056_12K3_AG6395C060019_12K3","obligated":431082.24,"piid":"AG6395D090056","recipient":{"uei":"C1D7UA31LAK8","display_name":"M - J RUSCOE"},"total_contract_value":431082.24},{"award_date":"2008-05-13","description":"BACKTAG + IN TUBE, PINT, QUART SIZE CONTAINERS","key":"CONT_AWD_AG6395D090056_12K3_AG6395C060019_12K3","obligated":431082.24,"piid":"AG6395D090056","recipient":{"uei":"C1D7UA31LAK8","display_name":"THE + RUSCOE COMPANY"},"total_contract_value":431082.24},{"award_date":"2008-05-13","description":"BACKTAG CEMENT.","key":"CONT_AWD_AG6395D080395_12K3_AG6395C060018_12K3","obligated":61409.28,"piid":"AG6395D080395","recipient":{"uei":"GDVZPLNAKLL9","display_name":"STEVEN INDUSTRIES INC"},"total_contract_value":61409.28},{"award_date":"2008-03-05","description":"RUSCOE MFG CTR#AG6395C060019, DELIVERY ORDER FOR CLN#7 CEMENT IN TUBE SIZE CONTAINERS PACKED 24/BX TOTAL 11,000 BXS INCLUDED 10 % OVERAGE. (1,320,000 OZ) WHSE STOCK - #Z888-00-000-0253","key":"CONT_AWD_AG6395D080271_12K3_AG6395C060019_12K3","obligated":329820.0,"piid":"AG6395D080271","recipient":{"uei":"C1D7UA31LAK8","display_name":"M - J RUSCOE"},"total_contract_value":329820.0},{"award_date":"2008-01-25","description":"BACKTAG + #Z888-00-000-0253","key":"CONT_AWD_AG6395D080271_12K3_AG6395C060019_12K3","obligated":329820.0,"piid":"AG6395D080271","recipient":{"uei":"C1D7UA31LAK8","display_name":"THE + RUSCOE COMPANY"},"total_contract_value":329820.0},{"award_date":"2008-01-25","description":"BACKTAG CEMENT.","key":"CONT_AWD_AG6395D080197_12K3_AG6395C060018_12K3","obligated":288748.8,"piid":"AG6395D080197","recipient":{"uei":"GDVZPLNAKLL9","display_name":"STEVEN INDUSTRIES INC"},"total_contract_value":288748.8}],"meta":{"vehicle_uuid":"8597845d-2a4c-5acd-99ff-1f5fe348501e","solicitation_identifier":"002-M-APHIS-06"}}' headers: CF-RAY: - - 9f73b8255b6f9934-JAX + - a447661a2fbbe25a-ORD Connection: - keep-alive Content-Type: - application/json Date: - - Wed, 06 May 2026 00:03:00 GMT + - Fri, 02 Oct 2026 23:13:39 GMT Nel: - '{"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}' Report-To: - - '{"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=HMF3PWMAqeXFo%2BwKj7LE49%2Fa5L0Xv8ItISm5Zfcn%2FKLUJZQlFzfYk1kIrU6EAyojStWx7tR02%2FGF83GVXSZ1kIRzeXR1FXLTIDkdPx%2BpA2kqnbtNw4Tmtg1A%2BHZvsu7ueiPRypEZlTSvYpKhzgz0"}]}' + - '{"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=s8IXzbRCOBJl3efgwzc3c3IFEzKHJcak%2F4ctI4tuXmWu3Gj5Qf%2B3G33G%2Fmz2F%2B4Y5nfTMwuJ%2FU2H9hXSt8KZyFstlMv%2BwMwUWwz%2FH12hu2sM6pt%2F%2F%2FBbL%2BZ2a6wa5gWgSYx1Gmqmx0xohDVg%2FgWi"}]}' Server: - cloudflare Transfer-Encoding: @@ -145,7 +147,7 @@ interactions: cf-cache-status: - DYNAMIC content-length: - - '3442' + - '3506' cross-origin-opener-policy: - same-origin referrer-policy: @@ -155,29 +157,31 @@ interactions: x-content-type-options: - nosniff x-execution-time: - - 0.090s + - 0.042s x-frame-options: - DENY x-ratelimit-burst-limit: - '1000' x-ratelimit-burst-remaining: - - '978' + - '982' x-ratelimit-burst-reset: - - '28' + - '35' x-ratelimit-daily-limit: - '2000000' x-ratelimit-daily-remaining: - - '1999978' + - '1997186' x-ratelimit-daily-reset: - - '86219' + - '2781' x-ratelimit-limit: - '1000' x-ratelimit-remaining: - - '978' + - '982' x-ratelimit-reset: - - '28' + - '35' x-results-counttype: - exact + x-tango-api-version: + - 5.8.0 status: code: 200 message: OK diff --git a/tests/cassettes/TestVehiclesIntegration.test_list_vehicles_uses_default_shape_and_search b/tests/cassettes/TestVehiclesIntegration.test_list_vehicles_uses_default_shape_and_search index 5133056..61ccf74 100644 --- a/tests/cassettes/TestVehiclesIntegration.test_list_vehicles_uses_default_shape_and_search +++ b/tests/cassettes/TestVehiclesIntegration.test_list_vehicles_uses_default_shape_and_search @@ -2,106 +2,104 @@ interactions: - request: body: '' headers: - accept: + Accept: - '*/*' - accept-encoding: + Accept-Encoding: - gzip, deflate - connection: + Connection: - keep-alive - host: + Host: - tango.makegov.com - user-agent: + User-Agent: - python-httpx/0.28.1 method: GET - uri: https://tango.makegov.com/api/vehicles/?page=1&limit=10&shape=uuid%2Csolicitation_identifier%2Cis_synthetic_solicitation%2Cprogram_acronym%2Corganization_id%2Corganization%2Cvehicle_type%2Cdescription%2Cidv_count%2Cawardee_count%2Corder_count%2Ctotal_obligated%2Cvehicle_obligations%2Cvehicle_contracts_value%2Clatest_award_date%2Csolicitation_title%2Csolicitation_date&search=GSA + uri: https://tango.makegov.com/api/vehicles/?page=1&limit=10&shape=uuid%2Csolicitation_identifier%2Cis_synthetic_solicitation%2Cprogram_acronym%2Corganization_id%2Corganization%2Cvehicle_type%2Cdescription%2Cidv_count%2Cholder_count%2Corder_winner_count%2Cawardee_count%2Corder_count%2Ctotal_obligated%2Cvehicle_obligations%2Cvehicle_contracts_value%2Clatest_award_date%2Csolicitation_title%2Csolicitation_date&search=GSA response: body: - string: '{"count":103,"next":"https://tango.makegov.com/api/vehicles/?limit=10&page=2&search=GSA&shape=uuid%2Csolicitation_identifier%2Cis_synthetic_solicitation%2Cprogram_acronym%2Corganization_id%2Corganization%2Cvehicle_type%2Cdescription%2Cidv_count%2Cawardee_count%2Corder_count%2Ctotal_obligated%2Cvehicle_obligations%2Cvehicle_contracts_value%2Clatest_award_date%2Csolicitation_title%2Csolicitation_date","previous":null,"results":[{"awardee_count":0,"description":["EMDX - RESEARCH AND CONSULTING ASSOCIATES, LLC, NATIONAL ANIMAL CARE BLANKET PURCHASE - AGREEMENT FOR THE AGRICULTURAL RESEARCH SERVICE","SCITECH SERVICES INC NATIONAL - ANIMAL CARE BLANKET PURCHASE AGREEMENT FOR THE AGRICULTURAL RESEARCH SERVICE","THE - MCCONNELL GROUP, INC., NATIONAL ANIMAL CARE BLANKET PURCHASE AGREEMENT FOR - THE AGRICULTURAL RESEARCH SERVICE","ABANTEARE LLC NATIONAL ANIMAL CARE BLANKET - PURCHASE AGREEMENT FOR THE AGRICULTURAL RESEARCH SERVICE","BCA FEDERAL, LLC, - NATIONAL ANIMAL CARE BLANKET PURCHASE AGREEMENT FOR THE AGRICULTURAL RESEARCH - SERVICE","FEFA, LLC NATIONAL ANIMAL CARE BLANKET PURCHASE AGREEMENT FOR THE - AGRICULTURAL RESEARCH SERVICE","SOBRAN, INC., NATIONAL ANIMAL CARE BLANKET - PURCHASE AGREEMENT FOR THE AGRICULTURAL RESEARCH SERVICE"],"idv_count":7,"is_synthetic_solicitation":false,"latest_award_date":"2026-05-01","order_count":0,"organization":{"organization_id":"0ef2831b-d699-50c7-8326-63541a75fa11","office_code":"1232SA","office_name":"USDA + string: '{"count":262,"next":"https://tango.makegov.com/api/vehicles/?limit=10&page=2&search=GSA&shape=uuid%2Csolicitation_identifier%2Cis_synthetic_solicitation%2Cprogram_acronym%2Corganization_id%2Corganization%2Cvehicle_type%2Cdescription%2Cidv_count%2Cholder_count%2Corder_winner_count%2Cawardee_count%2Corder_count%2Ctotal_obligated%2Cvehicle_obligations%2Cvehicle_contracts_value%2Clatest_award_date%2Csolicitation_title%2Csolicitation_date","previous":null,"results":[{"awardee_count":4,"description":["ESTABLISHMENT + OF A SINGLE AWARD BPA TO SUPPORT USDA NATIONAL FINANCE CENTER''S (NFC) MODERNIZATION + OF ITS LEGACY MAINFRAME PAYROLL SYSTEM USING FEDRAMP AUTHORIZED CLOUD PAYROLL, + SOFTWARE LICENSING, SOFTWARE MAINTENANCE, AND IT PROFESSIONAL SERVIC","ESTABLISHMENT + OF A SINGLE AWARD BPA TO SUPPORT USDA NFC''S MODERNIZATION OF ITS LEGACY MAINFRAME + PAYROLL SYSTEM USING FEDRAMP AUTHORIZED CLOUD PAYROLL, SOFTWARE LICENSING, + SOFTWARE MAINTENANCE, AND IT PROFESSIONAL SERVICES."],"holder_count":4,"idv_count":4,"is_synthetic_solicitation":false,"latest_award_date":"2026-08-04","order_count":3,"order_winner_count":4,"organization":{"organization_id":"9913639c-be79-53e5-9dc6-68ee8bc1bb9b","office_code":"123144","office_name":"USDA, + OCP-POD-ACQ-MGMT-BRANCH-FTC","agency_code":"1205","agency_name":"USDA, DEPARTMENTAL + ADMINISTRATION","department_code":"012","department_name":"AGRICULTURE, DEPARTMENT + OF"},"organization_id":"9913639c-be79-53e5-9dc6-68ee8bc1bb9b","program_acronym":"GSA","solicitation_date":null,"solicitation_identifier":"12314426Q0153","solicitation_title":null,"total_obligated":29999.39,"uuid":"d1c6e887-3591-5919-9e14-84233ae331d0","vehicle_contracts_value":18412019.28,"vehicle_obligations":18412019.28,"vehicle_type":{"code":"E","description":"BPA"}},{"awardee_count":1,"description":["BCA + FEDERAL, LLC, NATIONAL ANIMAL CARE BLANKET PURCHASE AGREEMENT FOR THE AGRICULTURAL + RESEARCH SERVICE","THE MCCONNELL GROUP, INC., NATIONAL ANIMAL CARE BLANKET + PURCHASE AGREEMENT FOR THE AGRICULTURAL RESEARCH SERVICE","SOBRAN, INC., NATIONAL + ANIMAL CARE BLANKET PURCHASE AGREEMENT FOR THE AGRICULTURAL RESEARCH SERVICE","SCITECH + SERVICES INC NATIONAL ANIMAL CARE BLANKET PURCHASE AGREEMENT FOR THE AGRICULTURAL + RESEARCH SERVICE","FEFA, LLC NATIONAL ANIMAL CARE BLANKET PURCHASE AGREEMENT + FOR THE AGRICULTURAL RESEARCH SERVICE","ABANTEARE LLC NATIONAL ANIMAL CARE + BLANKET PURCHASE AGREEMENT FOR THE AGRICULTURAL RESEARCH SERVICE","EMDX RESEARCH + AND CONSULTING ASSOCIATES, LLC, NATIONAL ANIMAL CARE BLANKET PURCHASE AGREEMENT + FOR THE AGRICULTURAL RESEARCH SERVICE"],"holder_count":7,"idv_count":7,"is_synthetic_solicitation":false,"latest_award_date":"2026-05-01","order_count":1,"order_winner_count":1,"organization":{"organization_id":"0ef2831b-d699-50c7-8326-63541a75fa11","office_code":"1232SA","office_name":"USDA ARS AFM APD","agency_code":"12H2","agency_name":"AGRICULTURAL RESEARCH SERVICE","department_code":"012","department_name":"AGRICULTURE, - DEPARTMENT OF"},"organization_id":"0ef2831b-d699-50c7-8326-63541a75fa11","program_acronym":"GSA","solicitation_date":null,"solicitation_identifier":"1232SA26Q0019","solicitation_title":null,"total_obligated":0.0,"uuid":"3fdd49c6-bf14-57b5-9b56-05a5d3adb35a","vehicle_contracts_value":0.0,"vehicle_obligations":0.0,"vehicle_type":{"code":"E","description":"BPA"}},{"awardee_count":2,"description":["VARIOUS + DEPARTMENT OF"},"organization_id":"0ef2831b-d699-50c7-8326-63541a75fa11","program_acronym":"GSA","solicitation_date":null,"solicitation_identifier":"1232SA26Q0019","solicitation_title":null,"total_obligated":195091.2,"uuid":"3fdd49c6-bf14-57b5-9b56-05a5d3adb35a","vehicle_contracts_value":602976.0,"vehicle_obligations":195091.2,"vehicle_type":{"code":"E","description":"BPA"}},{"awardee_count":2,"description":["GSA + BPA FOR FACILITIES SUPPORT SERVICES","GSA BPA FOR FACILITIES SUPPORT SERVICES + (NATIONWIDE)"],"holder_count":2,"idv_count":2,"is_synthetic_solicitation":false,"latest_award_date":"2023-08-21","order_count":6,"order_winner_count":2,"organization":{"organization_id":"16624b2a-ac98-5cea-8673-5afee0294cb1","office_code":"12905B","office_name":"USDA + ARS PWA AAO ACQ/PER PROP","agency_code":"12H2","agency_name":"AGRICULTURAL + RESEARCH SERVICE","department_code":"012","department_name":"AGRICULTURE, + DEPARTMENT OF"},"organization_id":"16624b2a-ac98-5cea-8673-5afee0294cb1","program_acronym":null,"solicitation_date":null,"solicitation_identifier":"12905B23R0008","solicitation_title":null,"total_obligated":4552262.2,"uuid":"21795b70-9d23-59f7-bf09-e27275161d53","vehicle_contracts_value":8521467.52,"vehicle_obligations":4552262.2,"vehicle_type":{"code":"E","description":"BPA"}},{"awardee_count":0,"description":["PRE-ACQUISITION + ENVIRONMENTAL DATABASE SEARCHES AND REPORTING SERVICES FOR USDA NATURAL RESOURCE + CONSERVATION SERVICES (NRCS) AGENCY - NATIONWIDE."],"holder_count":5,"idv_count":5,"is_synthetic_solicitation":false,"latest_award_date":"2026-09-03","order_count":0,"order_winner_count":0,"organization":{"organization_id":"5cea6c7c-ea62-5830-8b3c-1fbc3cf7bb94","office_code":"12FPC1","office_name":"FPAC + BUS CNTR-ACQ DIV-CENTRAL SEC","agency_code":"12D0","agency_name":"FARM PRODUCTION + AND CONSERVATION BUSINESS CENTER","department_code":"012","department_name":"AGRICULTURE, + DEPARTMENT OF"},"organization_id":"5cea6c7c-ea62-5830-8b3c-1fbc3cf7bb94","program_acronym":"GSA","solicitation_date":null,"solicitation_identifier":"12FPC126Q0023","solicitation_title":null,"total_obligated":0.0,"uuid":"2ccf1a8f-5082-5b4f-969d-6391385a372c","vehicle_contracts_value":0.0,"vehicle_obligations":0.0,"vehicle_type":{"code":"E","description":"BPA"}},{"awardee_count":1,"description":["NOAA + MODERN DATA ARCHITECTURE BPA - BOOZ ALLEN","NOAA MODERN DATA ARCHITECTURE + BPA - PRIMARY - ACCENTURE"],"holder_count":2,"idv_count":2,"is_synthetic_solicitation":false,"latest_award_date":"2026-09-25","order_count":1,"order_winner_count":1,"organization":{"organization_id":"2e8c9a06-9e38-5765-87cc-1d31b838101f","office_code":"1305M4","office_name":"DEPT + OF COMMERCE NOAA","agency_code":"1330","agency_name":"NATIONAL OCEANIC AND + ATMOSPHERIC ADMINISTRATION","department_code":"013","department_name":"COMMERCE, + DEPARTMENT OF"},"organization_id":"2e8c9a06-9e38-5765-87cc-1d31b838101f","program_acronym":"GSA","solicitation_date":null,"solicitation_identifier":"1305M426Q0075","solicitation_title":null,"total_obligated":391182.58,"uuid":"cf5452db-17f1-5aa5-81da-96912b512d75","vehicle_contracts_value":419164.29,"vehicle_obligations":391182.58,"vehicle_type":{"code":"E","description":"BPA"}},{"awardee_count":3,"description":["ESTABLISHING + MULTIPLE AWARD BPAS UNDER GSA MAS FOR NATIONWIDE SUPPLY AND DELIVERY OF COPY + PAPER AND RELATED PAPER PRODUCTS IN COMPLIANCE WITH ABILITYONE AND SUSTAINABILITY + REQUIREMENTS."],"holder_count":3,"idv_count":3,"is_synthetic_solicitation":false,"latest_award_date":"2025-09-22","order_count":41,"order_winner_count":3,"organization":{"organization_id":"51f9cb85-9d0f-59ae-ac9f-332cb3bc7772","office_code":"15BNAS","office_name":"NATIONAL + ACQUISITIONS - CO","agency_code":"1540","agency_name":"FEDERAL PRISON SYSTEM + / BUREAU OF PRISONS","department_code":"015","department_name":"JUSTICE, DEPARTMENT + OF"},"organization_id":"51f9cb85-9d0f-59ae-ac9f-332cb3bc7772","program_acronym":null,"solicitation_date":null,"solicitation_identifier":"15BNAS25Q00000050","solicitation_title":null,"total_obligated":355381.74,"uuid":"423f3ea1-95bb-593e-92d8-6bf29a9a9f7e","vehicle_contracts_value":355381.74,"vehicle_obligations":355381.74,"vehicle_type":{"code":"E","description":"BPA"}},{"awardee_count":0,"description":["NATIONAL + COPIER BPA. TERMS AND CONDITIONS ARE SUBJECT TO THE CLAUSES AND PROVISIONS + OF THE OFFERORS GSA MAS."],"holder_count":3,"idv_count":3,"is_synthetic_solicitation":false,"latest_award_date":"2026-09-17","order_count":0,"order_winner_count":0,"organization":{"organization_id":"51f9cb85-9d0f-59ae-ac9f-332cb3bc7772","office_code":"15BNAS","office_name":"NATIONAL + ACQUISITIONS - CO","agency_code":"1540","agency_name":"FEDERAL PRISON SYSTEM + / BUREAU OF PRISONS","department_code":"015","department_name":"JUSTICE, DEPARTMENT + OF"},"organization_id":"51f9cb85-9d0f-59ae-ac9f-332cb3bc7772","program_acronym":null,"solicitation_date":null,"solicitation_identifier":"15BNAS26Q00000076","solicitation_title":null,"total_obligated":0.0,"uuid":"5c27791e-5757-5e5f-b4ec-6ac9e12ed379","vehicle_contracts_value":0.0,"vehicle_obligations":0.0,"vehicle_type":{"code":"E","description":"BPA"}},{"awardee_count":2,"description":["VARIOUS DIVISIONS WITHIN THE AGENCY REQUIRE CURRICULUM DEVELOPMENT SUPPORT. EACH DEPARTMENT/DIVISION WILL BE REQUIRED TO USE THE ANALYZE, DESIGN, DEVELOP, IMPLEMENT AND EVALUATION - (ADDIE) MODULE.","DIVISIONS WITHIN THE AGENCY REQUIRE CURRICULUM DEVELOPMENT - SUPPORT. EACH DEPT/DIV WILL REQUIRE THE USE OF ANALYZE, DESIGN, DEVELOP, IMPLEMENT - AND EVALUATION (ADDIE) MODULE. EACH DEPT/DIV SPECIFIC REQUIREMENTS WILL BE - PROVIDED ON SEPARATE BPA CALL."],"idv_count":4,"is_synthetic_solicitation":false,"latest_award_date":"2025-09-04","order_count":5,"organization":{"organization_id":"ea1c7a92-5838-5641-99ba-1527f4524306","office_code":"15F067","office_name":"FBI-JEH","agency_code":"1549","agency_name":"FEDERAL + (ADDIE) MODULE.","VARIOUS DIVISIONS WITHIN THE AGENCY REQUIRE CURRICULUM DEVELOPMENT + SUPPORT. EACH DEPARTMENT/DIVISION WILL BE REQUIRED TO USE THE ANALYZE, DESIGN, + DEVELOP, IMPLEMENT AND EVALUATION (ADDIE) MODULE. THE MASTER BPA IS ONE OF + 4 TO SUPPORT THE AGENCY.","DIVISIONS WITHIN THE AGENCY REQUIRE CURRICULUM + DEVELOPMENT SUPPORT. EACH DEPT/DIV WILL REQUIRE THE USE OF ANALYZE, DESIGN, + DEVELOP, IMPLEMENT AND EVALUATION (ADDIE) MODULE. EACH DEPT/DIV SPECIFIC REQUIREMENTS + WILL BE PROVIDED ON SEPARATE BPA CALL."],"holder_count":4,"idv_count":4,"is_synthetic_solicitation":false,"latest_award_date":"2025-09-04","order_count":5,"order_winner_count":2,"organization":{"organization_id":"ea1c7a92-5838-5641-99ba-1527f4524306","office_code":"15F067","office_name":"FBI-JEH","agency_code":"1549","agency_name":"FEDERAL BUREAU OF INVESTIGATION","department_code":"015","department_name":"JUSTICE, - DEPARTMENT OF"},"organization_id":"ea1c7a92-5838-5641-99ba-1527f4524306","program_acronym":null,"solicitation_date":null,"solicitation_identifier":"15F06725Q0000150","solicitation_title":"Curriculum - Development Synopsis/Solicitation - Updated GSA site","total_obligated":3104682.7,"uuid":"6741a166-ae8e-57ba-b156-76f9137febad","vehicle_contracts_value":29044858.959999997,"vehicle_obligations":3104682.7,"vehicle_type":{"code":"E","description":"BPA"}},{"awardee_count":1,"description":["MULTI-AWARD - BLANKET PURCHASE AGREEMENT (BPA) FOR EDUCATION, OUTREACH & ANALYSIS"],"idv_count":4,"is_synthetic_solicitation":false,"latest_award_date":"2025-02-13","order_count":1,"organization":{"organization_id":"5b904ace-8e3f-5909-a991-3e7297c5ffeb","office_code":"1605C2","office_name":"DOL + DEPARTMENT OF"},"organization_id":"ea1c7a92-5838-5641-99ba-1527f4524306","program_acronym":null,"solicitation_date":"2025-04-10","solicitation_identifier":"15F06725Q0000150","solicitation_title":"Curriculum + Development Synopsis/Solicitation - Updated GSA site","total_obligated":8452629.68,"uuid":"6741a166-ae8e-57ba-b156-76f9137febad","vehicle_contracts_value":29771018.959999997,"vehicle_obligations":8452545.06,"vehicle_type":{"code":"E","description":"BPA"}},{"awardee_count":4,"description":["MULTI-AWARD + BLANKET PURCHASE AGREEMENT (BPA) FOR EDUCATION, OUTREACH & ANALYSIS"],"holder_count":7,"idv_count":7,"is_synthetic_solicitation":false,"latest_award_date":"2025-02-13","order_count":10,"order_winner_count":4,"organization":{"organization_id":"5b904ace-8e3f-5909-a991-3e7297c5ffeb","office_code":"1605C2","office_name":"DOL - CAS DIVISION 2 PROCUREMENT","agency_code":"1605","agency_name":"OFFICE OF THE ASSISTANT SECRETARY FOR ADMINISTRATION AND MANAGEMENT","department_code":"016","department_name":"LABOR, - DEPARTMENT OF"},"organization_id":"5b904ace-8e3f-5909-a991-3e7297c5ffeb","program_acronym":"GSA","solicitation_date":null,"solicitation_identifier":"1605C2-24-Q-00026","solicitation_title":null,"total_obligated":50000.0,"uuid":"9f042142-a09b-5244-9b3d-a638a4e2f219","vehicle_contracts_value":739950.6,"vehicle_obligations":50000.0,"vehicle_type":{"code":"E","description":"BPA"}},{"awardee_count":3,"description":["VAAA - ACQUISITION WORKFORCE TRAINING, MULTIPLE AWARD BLANKET PURCHASE AGREEMENT - (BPA)"],"idv_count":4,"is_synthetic_solicitation":false,"latest_award_date":"2024-02-12","order_count":14,"organization":{"organization_id":"d8247025-812e-5403-954c-09577eab4a91","office_code":"36C10X","office_name":"SAC - FREDERICK (36C10X)","agency_code":"3600","agency_name":"VETERANS AFFAIRS, - DEPARTMENT OF","department_code":"036","department_name":"VETERANS AFFAIRS, - DEPARTMENT OF"},"organization_id":"d8247025-812e-5403-954c-09577eab4a91","program_acronym":null,"solicitation_date":null,"solicitation_identifier":"36C10X23Q0022","solicitation_title":"U008--Acquisition - Workforce Training Multiple Award BPA - NEW GSA Contract Number Business Management - Research Associates, Inc","total_obligated":2359268.78,"uuid":"6fea329b-c906-5857-8384-6451a4c93430","vehicle_contracts_value":2359268.78,"vehicle_obligations":2359268.78,"vehicle_type":{"code":"E","description":"BPA"}},{"awardee_count":3,"description":["REFERENCE - LABORATORY SERVICES FOR VISN 21","REFERENCE LABORATORY SERVICES FOR VISN 21."],"idv_count":3,"is_synthetic_solicitation":false,"latest_award_date":"2020-09-25","order_count":93,"organization":{"organization_id":"2c45fd53-3590-5589-a188-1f34917b3de5","office_code":"36C261","office_name":"261-NETWORK - CONTRACT OFFICE 21 (36C261)","agency_code":"3600","agency_name":"VETERANS - AFFAIRS, DEPARTMENT OF","department_code":"036","department_name":"VETERANS - AFFAIRS, DEPARTMENT OF"},"organization_id":"2c45fd53-3590-5589-a188-1f34917b3de5","program_acronym":null,"solicitation_date":null,"solicitation_identifier":"36C26120Q0012","solicitation_title":"Q301--Quest - FSS-BPA GSA Schedule 621 II","total_obligated":52052266.47,"uuid":"e99312ce-b377-5fac-81ce-7f3f19b548c4","vehicle_contracts_value":53523209.29,"vehicle_obligations":52052266.47,"vehicle_type":{"code":"E","description":"BPA"}},{"awardee_count":6,"description":["GSA - LEASING SUPPORT SERVICES"],"idv_count":9,"is_synthetic_solicitation":false,"latest_award_date":"2020-05-13","order_count":911,"organization":{"organization_id":"6f5ca983-9b09-55b6-9ad0-f0ce1c2d06c1","office_code":"47PA05","office_name":"PBS - R00 CENTER FOR BROKER SERVICES","agency_code":"4740","agency_name":"PUBLIC - BUILDINGS SERVICE","department_code":"047","department_name":"GENERAL SERVICES - ADMINISTRATION"},"organization_id":"6f5ca983-9b09-55b6-9ad0-f0ce1c2d06c1","program_acronym":null,"solicitation_date":null,"solicitation_identifier":"47PA0519R0001","solicitation_title":"GSA - Leasing Support Services Plus","total_obligated":0.0,"uuid":"5dbdd43a-d8aa-56eb-a11f-78e0ded35642","vehicle_contracts_value":907.02,"vehicle_obligations":0.0,"vehicle_type":{"code":"B","description":"IDC"}},{"awardee_count":7,"description":["ELECTRIC - SUPPLY","PROVIDE ELECTRIC UTILITY SUPPLY IN ERCOT FOR GROUPS 9 FOR AGENCIES - LISTED IN EXHIBIT 1 OF THIS CONTRACT.","PROVIDE ELECTRIC UTILITY SUPPLY IN - PJM FOR GROUPS 3 5 7 FOR AGENCIES LISTED IN EXHIBIT 1 OF THIS CONTRACT.","PROVIDE - ELECTRIC UTILITY SUPPLY IN PJM FOR GROUPS 2 4 6 8 FOR AGENCIES LISTED IN EXHIBIT - 1 OF THIS CONTRACT."],"idv_count":9,"is_synthetic_solicitation":false,"latest_award_date":"2025-08-18","order_count":88,"organization":{"organization_id":"949facff-0fda-5062-972b-01ad17491bc6","office_code":"47PA08","office_name":"PBS - RETAIL UTILITY PROCUREMENTS","agency_code":"4740","agency_name":"PUBLIC BUILDINGS - SERVICE","department_code":"047","department_name":"GENERAL SERVICES ADMINISTRATION"},"organization_id":"949facff-0fda-5062-972b-01ad17491bc6","program_acronym":null,"solicitation_date":null,"solicitation_identifier":"47PA0825R0002","solicitation_title":"FY25 - GSA Streamlined Retail Electric Solicitation","total_obligated":44802108.86,"uuid":"6aa9d616-4d60-52b3-bfb7-a4f4ba332a3c","vehicle_contracts_value":105773964.96,"vehicle_obligations":44802108.86,"vehicle_type":{"code":"B","description":"IDC"}},{"awardee_count":0,"description":["ELECTRIC - SUPPLY FOR FIXED PRICES, PRICING GROUP 3 IN THE PJM BALANCING AUTHORITY","ELECTRIC - SUPPLY FOR FIXED PRICES, PRICING GROUPS 5 AND 6 IN THE PJM BALANCING AUTHORITY","ELECTRIC - SUPPLY FOR FIXED PRICES, PRICING GROUPS 1 AND 2 IN THE PJM BALANCING AUTHORITY","ELECTRIC - SUPPLY FOR FIXED PRICES, PRICING GROUP 4 IN THE PJM BALANCING AUTHORITY"],"idv_count":4,"is_synthetic_solicitation":false,"latest_award_date":"2026-03-23","order_count":0,"organization":{"organization_id":"949facff-0fda-5062-972b-01ad17491bc6","office_code":"47PA08","office_name":"PBS - RETAIL UTILITY PROCUREMENTS","agency_code":"4740","agency_name":"PUBLIC BUILDINGS - SERVICE","department_code":"047","department_name":"GENERAL SERVICES ADMINISTRATION"},"organization_id":"949facff-0fda-5062-972b-01ad17491bc6","program_acronym":null,"solicitation_date":null,"solicitation_identifier":"47PA0826R0001","solicitation_title":"FY26 - GSA Streamlined Retail Electric Solicitation","total_obligated":0.0,"uuid":"7c370689-aad8-5ba3-9498-c018bc5df121","vehicle_contracts_value":0.0,"vehicle_obligations":0.0,"vehicle_type":{"code":"B","description":"IDC"}},{"awardee_count":8,"description":["MULTIPLE - AWARD, INDEFINITE DELIVERY/INDEFINITE QUANTITY (IDIQ) WITH MINIMUM GUARANTEE - FOR CONSTRUCTION SERVICES FOR GSA-OWNED AND LEASED FEDERAL FACILITIES IN REGION - 1 SOUTH ZONE.","MULTIPLE AWARD, INDEFINITE DELIVERY/INDEFINITE QUANTITY (IDIQ) - WITH MINIMUM GUARANTEE FOR CONSTRUCTION SERVICES FOR GSA-OWNED AND LEASED - FEDERAL FACILITIES IN REGION 1 NORTH ZONE.","MULTIPLE AWARD, INDEFINITE DELIVERY/INDEFINITE - QUANTITY (IDIQ) WITH MINIMUM GUARANTEE FOR CONSTRUCTION SERVICES FOR GSA-OWNED - AND LEASED FEDERAL FACILITIES IN REGION 1 BOSTON ZONE."],"idv_count":24,"is_synthetic_solicitation":false,"latest_award_date":"2025-02-24","order_count":51,"organization":{"organization_id":"2fd4b124-5131-5ab9-9091-e2ee27274d0e","office_code":"47PB00","office_name":"PBS - R1 ACQ MANAGEMENT DIVISION","agency_code":"4740","agency_name":"PUBLIC BUILDINGS - SERVICE","department_code":"047","department_name":"GENERAL SERVICES ADMINISTRATION"},"organization_id":"2fd4b124-5131-5ab9-9091-e2ee27274d0e","program_acronym":null,"solicitation_date":null,"solicitation_identifier":"47PB0023R0012","solicitation_title":"GSA - Region 1 Construction IDIQ - North/Boston/South Zones","total_obligated":24000257.07,"uuid":"4b755976-75c2-573a-bd3a-92147261df2f","vehicle_contracts_value":24000257.07,"vehicle_obligations":24000257.07,"vehicle_type":{"code":"B","description":"IDC"}},{"awardee_count":0,"description":["CARIBBEAN - CONSTRUCTION & DESIGN-BUILD CONSTRUCTION SERVICES"],"idv_count":7,"is_synthetic_solicitation":false,"latest_award_date":"2025-12-16","order_count":0,"organization":{"organization_id":"54839cf5-aa68-5304-8f46-9aa63eaf2ba5","office_code":"47PC55","office_name":"PBS - PROJECT DELIVERY EAST - BRANCH E","agency_code":"4740","agency_name":"PUBLIC - BUILDINGS SERVICE","department_code":"047","department_name":"GENERAL SERVICES - ADMINISTRATION"},"organization_id":"54839cf5-aa68-5304-8f46-9aa63eaf2ba5","program_acronym":null,"solicitation_date":null,"solicitation_identifier":"47PC0222R0019","solicitation_title":"GSA - R2 - Caribbean Construction IDIQ","total_obligated":0.0,"uuid":"1a1704af-7d47-5293-b189-cf6a8c7ca35f","vehicle_contracts_value":0.0,"vehicle_obligations":0.0,"vehicle_type":{"code":"B","description":"IDC"}}]}' + DEPARTMENT OF"},"organization_id":"5b904ace-8e3f-5909-a991-3e7297c5ffeb","program_acronym":"GSA","solicitation_date":null,"solicitation_identifier":"1605C2-24-Q-00026","solicitation_title":null,"total_obligated":8791688.93,"uuid":"9f042142-a09b-5244-9b3d-a638a4e2f219","vehicle_contracts_value":31850797.48,"vehicle_obligations":8791688.93,"vehicle_type":{"code":"E","description":"BPA"}},{"awardee_count":1,"description":["THIS + ACQUISITION IS TO RE-COMPETE OPA AUDIOVISUAL PRODUCTION & SUPPORT SERVICES. + OPA ANTICIPATES UP TO TWO BPA AWARDEES OFF OF THE GSA MAS. THIS IS SET ASIDE + FOR SMALL BUSINESS AWARD. POP IS ANTICIPATED TO START MAY 27,2026 BUT IS SUBJECT + TO CHAN"],"holder_count":2,"idv_count":2,"is_synthetic_solicitation":false,"latest_award_date":"2026-05-18","order_count":2,"order_winner_count":1,"organization":{"organization_id":"ab79c8e7-358e-5dc7-a72e-949e5484b175","office_code":"1605C5","office_name":"DOL + - CAS DIVISION 5 PROCUREMENT","agency_code":"1605","agency_name":"OFFICE OF + THE ASSISTANT SECRETARY FOR ADMINISTRATION AND MANAGEMENT","department_code":"016","department_name":"LABOR, + DEPARTMENT OF"},"organization_id":"ab79c8e7-358e-5dc7-a72e-949e5484b175","program_acronym":null,"solicitation_date":null,"solicitation_identifier":"1605C5-26-Q-00003","solicitation_title":null,"total_obligated":80000.0,"uuid":"077943d7-d95d-5c6e-8ea9-c5f327d7c036","vehicle_contracts_value":240191.09,"vehicle_obligations":80000.0,"vehicle_type":{"code":"E","description":"BPA"}}]}' headers: CF-RAY: - - 9f73b81bf9a460c7-JAX + - a447660c1b141642-ORD Connection: - keep-alive Content-Type: - application/json Date: - - Wed, 06 May 2026 00:02:58 GMT + - Fri, 02 Oct 2026 23:13:36 GMT Nel: - '{"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}' Report-To: - - '{"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=mvbE0znCQMx6U%2BgaEc5wluqJwJD6ucje1qKsBbZ%2F7ZWCVecTQHyBrlSBGPO44JvVemBkaSui4vuB6wXTaW1QuBpGD9oaRlxmkXUigS2jf%2BDoqMKs2mlfmejcjhk6xq8MNUy%2B0sfLHo8NYz%2FHVLiQ"}]}' + - '{"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=yX3QUcfyTvrkzoan%2Fp0OOxgwNAgKIUG6B371p4IsdGvvSVGF%2FvK05myElQ339FCyQkjOGYJi%2BIX0U%2F%2FXQDUPgmQq164RdmDuMxZx72IqDc6KoOMAhp8qyNuNt2WJ8U3VdxWDfpx%2BXIqbCoK%2BYPxj"}]}' Server: - cloudflare Transfer-Encoding: @@ -111,7 +109,7 @@ interactions: cf-cache-status: - DYNAMIC content-length: - - '11445' + - '11708' cross-origin-opener-policy: - same-origin referrer-policy: @@ -121,29 +119,31 @@ interactions: x-content-type-options: - nosniff x-execution-time: - - 0.304s + - 0.032s x-frame-options: - DENY x-ratelimit-burst-limit: - '1000' x-ratelimit-burst-remaining: - - '987' + - '990' x-ratelimit-burst-reset: - - '29' + - '37' x-ratelimit-daily-limit: - '2000000' x-ratelimit-daily-remaining: - - '1999987' + - '1997194' x-ratelimit-daily-reset: - - '86221' + - '2783' x-ratelimit-limit: - '1000' x-ratelimit-remaining: - - '987' + - '990' x-ratelimit-reset: - - '29' + - '37' x-results-counttype: - exact + x-tango-api-version: + - 5.8.0 status: code: 200 message: OK