Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,10 @@ This project follows [Semantic Versioning](https://semver.org/).

## [Unreleased]

### Added

- **Award announcements** (Tango API 5.14.0). `listAwardAnnouncements(options)` and `getAwardAnnouncement(uuid, options)` over `/api/news/award_announcements/`, plus `AwardAnnouncement` and `AwardAnnouncementAwardee` model types, a registered shape schema with the `awardees(...)` and `organization(...)` expands, and the `AWARD_ANNOUNCEMENTS_MINIMAL` / `AWARD_ANNOUNCEMENTS_COMPREHENSIVE` defaults. Available at every tier. Every row names its `source`: `official_release` is the Department of War's daily contracts release, and `makegov_generated` rows are written by MakeGov from FPDS data with a language model and are not government text. All twenty of the API's filters are typed options on `ListAwardAnnouncementsOptions`, including `source`, `agency`, `piid`, `awardee`, `uei` and `include_withdrawn`, and `ordering` takes `published_date`, `amount` or `rank`. `text` can pass 16,000 characters, so the list default leaves it out and the detail default includes it. A list hides announcements DoD later withdrew unless `include_withdrawn` is `true`; `getAwardAnnouncement()` still returns them. The `alerts.award_announcement.match` event works through `createWebhookAlert({ query_type: "award_announcement", ... })`, which needed no SDK change.

## [1.5.0] - 2026-10-29

### Added
Expand Down
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -203,13 +203,14 @@ The Node.js client mirrors the Python SDK's high-level API. Selected highlights:
- `getForecast(id, options)` / `getOpportunity(opportunityId, options)` / `getNotice(noticeId, options)` / `getGrant(grantId, options)`
- `searchOpportunityAttachments(options)`

**GSA eLibrary / GSA eBuy / Protests / Contract Appeals / Federal Register / IT Dashboard / LCATs**
**GSA eLibrary / GSA eBuy / Protests / Contract Appeals / Federal Register / Award Announcements / IT Dashboard / LCATs**

- `listGsaElibraryContracts(options)` / `getGsaElibraryContract(uuid, options)`
- `listEbuyRequests(options)` / `getEbuyRequest(rfqId, options)` / `getEbuyAttachmentUrl(rfqId, docSeqNum)` / `getEbuyAccess()`
- `listProtests(options)` / `getProtest(caseId)`
- `listContractAppeals(options)` / `getContractAppeal(uuid, options)`
- `listFederalRegisterDocuments(options)` / `getFederalRegisterDocument(uuid, options)`
- `listAwardAnnouncements(options)` / `getAwardAnnouncement(uuid, options)` (`makegov_generated` rows are written by MakeGov from FPDS data with a language model and are not government text)
- `listItDashboard(options)` / `getItDashboard(uii)`
- `listLcats(options)` / `listIdvLcats(key, options)`

Expand Down
4 changes: 1 addition & 3 deletions contracts/conformance_baseline.json
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
{
"_comment": "Accepted SDK coverage gaps vs the API contract. Gaps listed here downgrade from error to warning in scripts/check-filter-shape-conformance.ts. Each entry is tracked backlog: remove it in the same PR that closes the gap in the SDK. `missing_filters` maps a resource to filter params the mapped method does not expose; `unimplemented_resources` lists contract resources with no SDK method at all. events and news are content endpoints with no list method and stay baselined permanently (tango-python does the same). The assistance/* resources (financial-assistance awards) are not yet ported.",
"_comment": "Accepted SDK coverage gaps vs the API contract. Gaps listed here downgrade from error to warning in scripts/check-filter-shape-conformance.ts. Each entry is tracked backlog: remove it in the same PR that closes the gap in the SDK. `missing_filters` maps a resource to filter params the mapped method does not expose; `unimplemented_resources` lists contract resources with no SDK method at all. The assistance/* resources (financial-assistance awards) are not yet ported.",
"missing_filters": {},
"unimplemented_resources": [
"events",
"news",
"assistance/direct_payments",
"assistance/grants",
"assistance/loans",
Expand Down
260 changes: 180 additions & 80 deletions contracts/filter_shape_contract.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"meta": {
"api_version": "5.13.0",
"api_version": "5.14.0",
"description": "Canonical API filter/shape contract. Downstream consumers (SDK, MCP) should validate their conformance against this manifest.",
"schema_version": 2
},
Expand Down Expand Up @@ -9039,64 +9039,6 @@
},
"swagger_params": []
},
"events": {
"basename": "g2x-events",
"prefix": "events",
"resource_key": "events",
"runtime": {
"filter_params": [
"is_free",
"is_virtual",
"organizer",
"search",
"source",
"start_date_after",
"start_date_before",
"state"
],
"filter_params_detail": {
"is_free": {
"type": "boolean"
},
"is_virtual": {
"type": "boolean"
},
"organizer": {
"lookup": "icontains",
"type": "string"
},
"search": {
"type": "string"
},
"source": {
"type": "string"
},
"start_date_after": {
"lookup": "gte",
"type": "date"
},
"start_date_before": {
"lookup": "lte",
"type": "date"
},
"state": {
"lookup": "iexact",
"type": "string"
}
},
"ordering_aliases": [],
"ordering_fields": [],
"pagination": {
"max_page_size": 100
},
"shape": null,
"shape_flat_paths": [],
"shape_gated_by_level": {},
"shape_supported": false,
"shape_tier_required": null
},
"swagger_params": []
},
"exclusions": {
"basename": "exclusion",
"prefix": "exclusions",
Expand Down Expand Up @@ -12717,51 +12659,209 @@
"show_shapes"
]
},
"news": {
"basename": "g2x-news",
"prefix": "news",
"resource_key": "news",
"news/award_announcements": {
"basename": "awardannouncement",
"prefix": "news/award_announcements",
"resource_key": "news/award_announcements",
"runtime": {
"filter_params": [
"published_after",
"published_before",
"action_type",
"agency",
"amount_max",
"amount_min",
"announcement_type",
"award_date_after",
"award_date_before",
"awardee",
"civilian",
"component",
"include_withdrawn",
"is_modification",
"is_multiple_award",
"piid",
"published_date_after",
"published_date_before",
"search",
"small_business",
"source",
"tag",
"vertical"
"uei"
],
"filter_params_detail": {
"published_after": {
"action_type": {
"type": "string"
},
"agency": {
"type": "string"
},
"amount_max": {
"lookup": "lte",
"type": "number"
},
"amount_min": {
"lookup": "gte",
"type": "datetime"
"type": "number"
},
"announcement_type": {
"type": "string"
},
"award_date_after": {
"lookup": "gte",
"type": "date"
},
"published_before": {
"award_date_before": {
"lookup": "lte",
"type": "datetime"
"type": "date"
},
"search": {
"awardee": {
"type": "string"
},
"source": {
"civilian": {
"type": "boolean"
},
"component": {
"type": "string"
},
"tag": {
"include_withdrawn": {
"type": "boolean"
},
"is_modification": {
"type": "boolean"
},
"is_multiple_award": {
"type": "boolean"
},
"piid": {
"type": "string"
},
"vertical": {
"lookup": "iexact",
"published_date_after": {
"lookup": "gte",
"type": "date"
},
"published_date_before": {
"lookup": "lte",
"type": "date"
},
"search": {
"type": "string"
},
"small_business": {
"type": "boolean"
},
"source": {
"choices": [
"makegov_generated",
"official_release"
],
"choices_count": 2,
"type": "choice"
},
"uei": {
"type": "string"
}
},
"ordering_aliases": [],
"ordering_fields": [],
"ordering_fields": [
"amount",
"published_date",
"rank"
],
"pagination": {
"max_page_size": 100
},
"shape": null,
"shape_flat_paths": [],
"shape": {
"expands": {
"awardees": {
"expands": {},
"fields": [
"location",
"name",
"small_business",
"uei"
]
},
"organization": {
"expands": {},
"fields": [
"agency_code",
"agency_name",
"department_code",
"department_name",
"office_code",
"office_name",
"organization_id"
]
}
},
"fields": [
"action_type",
"amount",
"announcement_type",
"award_date",
"award_kind",
"award_uuids",
"awardee_count",
"civilian",
"component",
"contracting_activity",
"corrections",
"is_modification",
"is_multiple_award",
"is_withdrawn",
"obligated_at_award",
"piids",
"published_date",
"source",
"source_name",
"source_record_id",
"source_url",
"text",
"title",
"uuid",
"value_kind"
]
},
"shape_flat_paths": [
"action_type",
"amount",
"announcement_type",
"award_date",
"award_kind",
"award_uuids",
"awardee_count",
"awardees",
"awardees.location",
"awardees.name",
"awardees.small_business",
"awardees.uei",
"civilian",
"component",
"contracting_activity",
"corrections",
"is_modification",
"is_multiple_award",
"is_withdrawn",
"obligated_at_award",
"organization",
"organization.agency_code",
"organization.agency_name",
"organization.department_code",
"organization.department_name",
"organization.office_code",
"organization.office_name",
"organization.organization_id",
"piids",
"published_date",
"source",
"source_name",
"source_record_id",
"source_url",
"text",
"title",
"uuid",
"value_kind"
],
"shape_gated_by_level": {},
"shape_supported": false,
"shape_supported": true,
"shape_tier_required": null
},
"swagger_params": []
Expand Down
Loading
Loading