Skip to content

Commit f42c654

Browse files
vdavezclaude
andcommitted
docs: add missing endpoints and update filter params
Add documentation for Offices, Organizations, OTAs, OTIDVs, Subawards, NAICS, Assistance, GSA eLibrary Contracts, and Protests endpoints. Update Entities, Forecasts, Opportunities, Notices, and Grants with full explicit filter parameters. Add PROTESTS_MINIMAL and GSA_ELIBRARY_CONTRACTS_MINIMAL to ShapeConfig table. Update README with new endpoint examples and project structure. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 60d9fb2 commit f42c654

2 files changed

Lines changed: 629 additions & 47 deletions

File tree

README.md

Lines changed: 58 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ A modern Python SDK for the [Tango API](https://tango.makegov.com) by MakeGov, f
66

77
- **Dynamic Response Shaping** - Request only the fields you need, reducing payload sizes by 60-80%
88
- **Full Type Safety** - Runtime-generated TypedDict types with accurate type hints for IDE autocomplete
9-
- **Comprehensive API Coverage** - All major Tango API endpoints (contracts, entities, forecasts, opportunities, notices, grants, webhooks) [Note: the current version does NOT implement all endpoints, we will be adding them incrementally]
9+
- **Comprehensive API Coverage** - All major Tango API endpoints (contracts, IDVs, OTAs, entities, forecasts, opportunities, notices, grants, protests, webhooks, and more)
1010
- **Flexible Data Access** - Dictionary-based response objects with validation
1111
- **Modern Python** - Built for Python 3.12+ using modern async-ready patterns
1212
- **Production-Ready** - Comprehensive test suite with VCR.py-based integration tests
@@ -152,14 +152,33 @@ contracts = client.list_contracts(
152152
**Response Options:**
153153
- `shape`, `flat`, `flat_lists` - Response shaping options
154154

155+
### IDVs, OTAs, OTIDVs
156+
157+
```python
158+
# List IDVs (keyset pagination)
159+
idvs = client.list_idvs(limit=25, awarding_agency="4700")
160+
161+
# Get single IDV with shaping
162+
idv = client.get_idv("IDV_KEY", shape=ShapeConfig.IDVS_COMPREHENSIVE)
163+
164+
# OTAs and OTIDVs follow the same pattern
165+
otas = client.list_otas(limit=25)
166+
otidvs = client.list_otidvs(limit=25)
167+
```
168+
169+
### Vehicles
170+
171+
```python
172+
vehicles = client.list_vehicles(search="GSA schedule", shape=ShapeConfig.VEHICLES_MINIMAL)
173+
vehicle = client.get_vehicle("UUID", shape=ShapeConfig.VEHICLES_COMPREHENSIVE)
174+
awardees = client.list_vehicle_awardees("UUID")
175+
```
176+
155177
### Entities (Vendors/Recipients)
156178

157179
```python
158-
# List entities
159-
entities = client.list_entities(
160-
page=1,
161-
limit=25
162-
)
180+
# List entities with filters
181+
entities = client.list_entities(search="Booz Allen", state="VA", limit=25)
163182

164183
# Get specific entity by UEI or CAGE code
165184
entity = client.get_entity("ZQGGHJH74DW7")
@@ -168,47 +187,50 @@ entity = client.get_entity("ZQGGHJH74DW7")
168187
### Forecasts
169188

170189
```python
171-
# List contract forecasts
172-
forecasts = client.list_forecasts(
173-
agency="GSA",
174-
limit=25
175-
)
190+
forecasts = client.list_forecasts(agency="GSA", fiscal_year=2025, limit=25)
176191
```
177192

178193
### Opportunities
179194

180195
```python
181-
# List opportunities/solicitations
182-
opportunities = client.list_opportunities(
183-
agency="DOD",
184-
limit=25
185-
)
196+
opportunities = client.list_opportunities(agency="DOD", active=True, limit=25)
186197
```
187198

188199
### Notices
189200

190201
```python
191-
# List contract notices
192-
notices = client.list_notices(
193-
agency="DOD",
194-
limit=25
195-
)
202+
notices = client.list_notices(agency="DOD", notice_type="award", limit=25)
196203
```
197204

198205
### Grants
199206

200207
```python
201-
# List grant opportunities
202-
grants = client.list_grants(
203-
agency_code="HHS",
204-
limit=25
205-
)
208+
grants = client.list_grants(agency="HHS", status="forecasted", limit=25)
209+
```
210+
211+
### Protests
212+
213+
```python
214+
protests = client.list_protests(source_system="gao", outcome="Sustained", limit=25)
215+
protest = client.get_protest("CASE_UUID")
216+
```
217+
218+
### GSA eLibrary Contracts
219+
220+
```python
221+
contracts = client.list_gsa_elibrary_contracts(schedule="MAS", limit=25)
222+
contract = client.get_gsa_elibrary_contract("UUID")
206223
```
207224

208-
### Business Types
225+
### Reference Data
209226

210227
```python
211-
# List business types
228+
# Offices, organizations, NAICS, subawards, assistance, business types
229+
offices = client.list_offices(search="acquisitions")
230+
organizations = client.list_organizations(level=1)
231+
naics = client.list_naics(search="software")
232+
subawards = client.list_subawards(prime_uei="UEI123")
233+
assistance = client.list_assistance(fiscal_year=2025)
212234
business_types = client.list_business_types()
213235
```
214236

@@ -417,13 +439,21 @@ tango-python/
417439
│ ├── conftest.py # Integration test fixtures
418440
│ ├── validation.py # Validation utilities
419441
│ ├── test_agencies_integration.py
442+
│ ├── test_assistance_integration.py
420443
│ ├── test_contracts_integration.py
421444
│ ├── test_entities_integration.py
422445
│ ├── test_forecasts_integration.py
423446
│ ├── test_grants_integration.py
447+
│ ├── test_naics_integration.py
424448
│ ├── test_notices_integration.py
449+
│ ├── test_offices_integration.py
425450
│ ├── test_opportunities_integration.py
451+
│ ├── test_organizations_integration.py
452+
│ ├── test_otas_otidvs_integration.py
453+
│ ├── test_protests_integration.py
426454
│ ├── test_reference_data_integration.py
455+
│ ├── test_subawards_integration.py
456+
│ ├── test_vehicles_idvs_integration.py
427457
│ └── test_edge_cases_integration.py
428458
├── docs/ # Documentation
429459
│ ├── API_REFERENCE.md # Complete API reference

0 commit comments

Comments
 (0)