CALC Labor Category Rates¶
CALC (Contract Awarded Labor Category) labor rates are exposed as nested endpoints under IDVs and entities. For field definitions, see the CALC Labor Rates Data Dictionary.
Access: Requires Pro tier or above.
Endpoints¶
GET /api/idvs/{key}/lcats/(rates for a specific IDV)GET /api/entities/{uei}/lcats/(rates for a specific entity, via IDV recipient linkage)
These are nested endpoints -- there is no top-level /api/lcats/ route. Use the IDV key or entity UEI to scope the results.
Filtering¶
Core filters:
| Param | What it does |
|---|---|
search | Full-text search across vendor name, labor category, category, and subcategory. |
vendor_name | Case-insensitive partial match on vendor name. |
labor_category | Case-insensitive partial match on labor category title. |
price_gte, price_lte | Filter by current price range (decimal). |
education_level | Exact match on education level (case-insensitive). |
min_years_experience_gte, min_years_experience_lte | Filter by minimum years of experience range. |
security_clearance | Exact match on security clearance requirement (case-insensitive). |
worksite | Exact match on work location type (case-insensitive). |
business_size | Exact match on business size code (case-insensitive). |
sin | Exact match on Special Item Number (case-insensitive). |
category | Case-insensitive partial match on service category. |
idv_piid | Exact match on the stored PIID from CALC. |
key | IDV key (case-insensitive). |
piid | IDV PIID (case-insensitive). |
Ordering¶
CALC labor rates support ordering= with a strict allowlist:
current_pricevendor_namelabor_categoryeducation_levelmin_years_experiencemodified
Prefix with - for descending order.
Examples:
- Cheapest first:
GET /api/idvs/{key}/lcats/?ordering=current_price - Most experienced first:
GET /api/idvs/{key}/lcats/?ordering=-min_years_experience
Pagination¶
Uses page-number pagination:
page(default 1)limit(default 10, max 100)
Response shaping¶
Use ?shape= to customize the response. Root fields:
uuid,labor_category,current_priceeducation_level,min_years_experience,experience_rangesecurity_clearance,worksitesin,category,subcategory,schedulecontract_start,contract_end
Expansions:
idv(key, piid, award_date)-- linked IDV details (Pro tier required)recipient(uei, display_name)-- entity details via IDV recipient (Pro tier required)business_size(code, description)-- business size with human-readable description
A default shape is applied when no ?shape= parameter is provided, so ?flat=true works without needing an explicit shape.
Example:
/api/idvs/{key}/lcats/?shape=uuid,labor_category,current_price,idv(key,piid)
Flat example:
/api/idvs/{key}/lcats/?flat=true
Rate limiting¶
These endpoints (GET /api/idvs/{key}/lcats/ and GET /api/entities/{uei}/lcats/) carry a separate premium query budget that replaces your account's standard daily and per-minute rate limits — it is not additive.
A premium budget is tied to an endpoint family (these LCATS endpoints share one counter). Requests count as one request per API call, regardless of how many rows are returned. The budget resets daily at 00:00 UTC.
Check your current premium usage and limits on your account profile. To request a higher limit, email [email protected].
For header details and how 429 responses work, see the Rate limits guide.