{"openapi":"3.1.0","info":{"title":"American Trades Index API","version":"1.0.0","description":"American Trades Index helps you find and win more business. Find the projects being built, the companies around them, and the markets where demand is growing. ATI Pro covers the dashboard and MCP (API access is Enterprise): projects and who is building them, companies, markets, license verification, supply, movement, qualifier, a watchlist and saved lists. ATI Pro is for one person; teams are Enterprise. Labor analytics (the 24-month outlook, forecasts, retirement exposure, recommendations) are the Enterprise labor module; on Solo and Team those endpoints answer 402 upgrade_required and the modeled labor fields are left out of other responses. Every paid plan includes a monthly pool of credits for API and MCP calls and starts with a 14-day free trial: ATI Pro ($199/mo, 1,500 credits), or Enterprise (custom, by a call). Every error is JSON: {error, detail[, fields][, upgrade][, request_id]}. Codes: invalid_request (400), unauthorized (401), upgrade_required / credits_exhausted / payment_required (402), forbidden (403), not_found (404), rate_limited (429, with Retry-After), internal_error (500, quote request_id to support). Metering: each metered call costs 10 (quick), 30 (research) or 80 (deep) credits from the workspace pool; a cache hit costs the same as a miss; responses carry X-ATI-Credits-Charged, X-ATI-Credits-Band, X-ATI-Credits-Remaining and X-ATI-Credits-Reset. Verification, charts and watchlist management are free. Versioning: /v1 is stable; breaking changes ship as /v2 with at least six months of overlap and Sunset headers on /v1."},"servers":[{"url":"https://api.americantradesindex.com"}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"ati_live_... key. Get one by starting a free trial at https://americantradesindex.com/onboarding; keys live in the dashboard under Settings > Developer. POST /v1/keys mints additional keys for the same workspace."},"apiKeyHeader":{"type":"apiKey","in":"header","name":"x-api-key","description":"The same ati_live_... key, for clients that cannot send an Authorization header. Either one works; do not send both."}}},"paths":{"/v1/verify":{"get":{"summary":"Verify a license by number, or search licensees by name. Free (not metered).","security":[{"bearerAuth":[]}],"parameters":[{"name":"state","in":"query","required":true,"schema":{"type":"string"},"description":"Two-letter state (TX) or a metro key (NYC)"},{"name":"license","in":"query","required":false,"schema":{"type":"string"},"description":"Exact license number"},{"name":"name","in":"query","required":false,"schema":{"type":"string"},"description":"Name search (use instead of license)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":25},"description":"Rows to return (max 25)"}],"responses":{"200":{"description":"matches[] with status, trade, tier, expiry and the register facts"},"400":{"description":"invalid_request: detail names the field"},"401":{"description":"unauthorized: missing, invalid or revoked key"},"402":{"description":"upgrade_required (no active plan), credits_exhausted (period pool used up) or payment_required (last charge failed); body carries an `upgrade` URL"},"429":{"description":"rate_limited (120/min per workspace). Every response carries RateLimit-Limit/Remaining/Reset/Policy; a 429 adds Retry-After"}}}},"/v1/supply":{"get":{"summary":"Market supply: licensed counts by tier and trade (current vs total), density, and whether it is rising or falling. Costs 10 credits per call (quick); the response carries X-ATI-Credits-Charged and X-ATI-Credits-Remaining.","security":[{"bearerAuth":[]}],"parameters":[{"name":"state","in":"query","required":false,"schema":{"type":"string"},"description":"Two-letter state; required unless metro is given"},{"name":"metro","in":"query","required":false,"schema":{"type":"string"},"description":"Metro (CBSA) name, e.g. \"Dallas-Fort Worth\""},{"name":"trade","in":"query","required":false,"schema":{"type":"string"},"description":"Trade key: electrical, plumbing, hvac, fire_sprinkler, sheet_metal, elevator, boiler, well_drilling, appliance, electrical_sign"},{"name":"tier","in":"query","required":false,"schema":{"type":"integer","minimum":0,"maximum":9},"description":"0 any, 1 apprentice, 2 residential, 3 journeyman, 4 master, 5 contractor, 9 inspector"},{"name":"county","in":"query","required":false,"schema":{"type":"string"},"description":"County name, used with state when fips is not given"},{"name":"county_fips","in":"query","required":false,"schema":{"type":"string"},"description":"5-digit FIPS"},{"name":"window_days","in":"query","required":false,"schema":{"type":"integer"},"description":"Movement window (1-365)"}],"responses":{"200":{"description":"supply + movement signal"},"400":{"description":"invalid_request: detail names the field"},"401":{"description":"unauthorized: missing, invalid or revoked key"},"402":{"description":"upgrade_required (no active plan), credits_exhausted (period pool used up) or payment_required (last charge failed); body carries an `upgrade` URL"},"403":{"description":"state out of scope"},"429":{"description":"rate_limited (120/min per workspace). Every response carries RateLimit-Limit/Remaining/Reset/Policy; a 429 adds Retry-After"}}}},"/v1/movement":{"get":{"summary":"The change graph: new_license, ladder_upgrade, status_change, lapsed, geo_move, classification_change and more. Costs 10 credits per call (quick); the response carries X-ATI-Credits-Charged and X-ATI-Credits-Remaining.","security":[{"bearerAuth":[]}],"parameters":[{"name":"state","in":"query","required":true,"schema":{"type":"string"},"description":"Two-letter state (TX) or a metro key (NYC)"},{"name":"since","in":"query","required":false,"schema":{"type":"string","format":"date"},"description":"ISO date"},{"name":"window_days","in":"query","required":false,"schema":{"type":"integer"},"description":"Days back (default 90)"},{"name":"event","in":"query","required":false,"schema":{"type":"string"},"description":"Event type filter"},{"name":"trade","in":"query","required":false,"schema":{"type":"string"},"description":"Trade key: electrical, plumbing, hvac, fire_sprinkler, sheet_metal, elevator, boiler, well_drilling, appliance, electrical_sign"},{"name":"county","in":"query","required":false,"schema":{"type":"string"},"description":"County name, used with state when fips is not given"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500},"description":"Rows to return (max 500)"}],"responses":{"200":{"description":"events[]"},"400":{"description":"invalid_request: detail names the field"},"401":{"description":"unauthorized: missing, invalid or revoked key"},"402":{"description":"upgrade_required (no active plan), credits_exhausted (period pool used up) or payment_required (last charge failed); body carries an `upgrade` URL"},"429":{"description":"rate_limited (120/min per workspace). Every response carries RateLimit-Limit/Remaining/Reset/Policy; a 429 adds Retry-After"}}}},"/v1/national":{"get":{"summary":"Rank every state for a trade by supply or growth. Costs 30 credits per call (research); the response carries X-ATI-Credits-Charged and X-ATI-Credits-Remaining.","security":[{"bearerAuth":[]}],"parameters":[{"name":"trade","in":"query","required":false,"schema":{"type":"string"},"description":"Trade key: electrical, plumbing, hvac, fire_sprinkler, sheet_metal, elevator, boiler, well_drilling, appliance, electrical_sign"},{"name":"metric","in":"query","required":false,"schema":{"type":"string","enum":["supply","growth"]},"description":"supply or growth"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":60},"description":"Rows to return (max 60)"}],"responses":{"200":{"description":"states[] ranked"},"400":{"description":"invalid_request: detail names the field"},"401":{"description":"unauthorized: missing, invalid or revoked key"},"402":{"description":"upgrade_required (no active plan), credits_exhausted (period pool used up) or payment_required (last charge failed); body carries an `upgrade` URL"},"429":{"description":"rate_limited (120/min per workspace). Every response carries RateLimit-Limit/Remaining/Reset/Policy; a 429 adds Retry-After"}}}},"/v1/national/outlook":{"get":{"summary":"The national 24-month labor-tightening outlook: where pressure is emerging, by state and top markets, and which trades drive it. Costs 80 credits per call (deep); the response carries X-ATI-Credits-Charged and X-ATI-Credits-Remaining. Enterprise labor module only.","security":[{"bearerAuth":[]}],"parameters":[{"name":"trade","in":"query","required":false,"schema":{"type":"string"},"description":"Trade key: electrical, plumbing, hvac, fire_sprinkler, sheet_metal, elevator, boiler, well_drilling, appliance, electrical_sign"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":60},"description":"Rows to return (max 60)"}],"responses":{"200":{"description":"outlook"},"400":{"description":"invalid_request: detail names the field"},"401":{"description":"unauthorized: missing, invalid or revoked key"},"402":{"description":"upgrade_required (no active plan), credits_exhausted (period pool used up) or payment_required (last charge failed); body carries an `upgrade` URL"},"429":{"description":"rate_limited (120/min per workspace). Every response carries RateLimit-Limit/Remaining/Reset/Policy; a 429 adds Retry-After"}}}},"/v1/national/retirement":{"get":{"summary":"Retirement exposure: estimated near-retirement (55+) and at-retirement (65+) headcount for a county, state or the nation, from Census ACS age structure applied to the licensed workforce. Costs 30 credits per call (research); the response carries X-ATI-Credits-Charged and X-ATI-Credits-Remaining. Enterprise labor module only.","security":[{"bearerAuth":[]}],"parameters":[{"name":"state","in":"query","required":false,"schema":{"type":"string"},"description":"Two-letter state (TX) or a metro key (NYC)"},{"name":"county","in":"query","required":false,"schema":{"type":"string"},"description":"County name, used with state when fips is not given"},{"name":"trade","in":"query","required":false,"schema":{"type":"string"},"description":"Trade key: electrical, plumbing, hvac, fire_sprinkler, sheet_metal, elevator, boiler, well_drilling, appliance, electrical_sign"}],"responses":{"200":{"description":"exposure with method and caveat"},"400":{"description":"invalid_request: detail names the field"},"401":{"description":"unauthorized: missing, invalid or revoked key"},"402":{"description":"upgrade_required (no active plan), credits_exhausted (period pool used up) or payment_required (last charge failed); body carries an `upgrade` URL"},"429":{"description":"rate_limited (120/min per workspace). Every response carries RateLimit-Limit/Remaining/Reset/Policy; a 429 adds Retry-After"}}}},"/v1/national/index":{"get":{"summary":"One metric for every state (the Intelligence Index map layer). Costs 30 credits per call (research); the response carries X-ATI-Credits-Charged and X-ATI-Credits-Remaining.","security":[{"bearerAuth":[]}],"parameters":[{"name":"metric","in":"query","required":false,"schema":{"type":"string"},"description":"e.g. shortage_probability_24mo"},{"name":"trade","in":"query","required":false,"schema":{"type":"string"},"description":"Trade key: electrical, plumbing, hvac, fire_sprinkler, sheet_metal, elevator, boiler, well_drilling, appliance, electrical_sign"}],"responses":{"200":{"description":"states[] values"},"400":{"description":"invalid_request: detail names the field"},"401":{"description":"unauthorized: missing, invalid or revoked key"},"402":{"description":"upgrade_required (no active plan), credits_exhausted (period pool used up) or payment_required (last charge failed); body carries an `upgrade` URL"},"429":{"description":"rate_limited (120/min per workspace). Every response carries RateLimit-Limit/Remaining/Reset/Policy; a 429 adds Retry-After"}}}},"/v1/county":{"get":{"summary":"One county in full: licensed supply by trade (current/active/total), employment, wages, apprentices, the calibrated 24-month outlook, permits and demand context, each figure with its own as-of date. Costs 10 credits per call (quick); the response carries X-ATI-Credits-Charged and X-ATI-Credits-Remaining.","security":[{"bearerAuth":[]}],"parameters":[{"name":"fips","in":"query","required":false,"schema":{"type":"string"},"description":"5-digit county FIPS (or give state + county)"},{"name":"state","in":"query","required":false,"schema":{"type":"string"},"description":"Two-letter state (TX) or a metro key (NYC)"},{"name":"county","in":"query","required":false,"schema":{"type":"string"},"description":"County name, used with state when fips is not given"}],"responses":{"200":{"description":"county profile"},"400":{"description":"invalid_request: detail names the field"},"401":{"description":"unauthorized: missing, invalid or revoked key"},"402":{"description":"upgrade_required (no active plan), credits_exhausted (period pool used up) or payment_required (last charge failed); body carries an `upgrade` URL"},"429":{"description":"rate_limited (120/min per workspace). Every response carries RateLimit-Limit/Remaining/Reset/Policy; a 429 adds Retry-After"}}}},"/v1/county/listings":{"get":{"summary":"Live job listings for a county and trade. Costs 10 credits per call (quick); the response carries X-ATI-Credits-Charged and X-ATI-Credits-Remaining.","security":[{"bearerAuth":[]}],"parameters":[{"name":"fips","in":"query","required":false,"schema":{"type":"string"},"description":"5-digit county FIPS (or give state + county)"},{"name":"state","in":"query","required":false,"schema":{"type":"string"},"description":"Two-letter state (TX) or a metro key (NYC)"},{"name":"county","in":"query","required":false,"schema":{"type":"string"},"description":"County name, used with state when fips is not given"},{"name":"trade","in":"query","required":true,"schema":{"type":"string"},"description":"Trade key: electrical, plumbing, hvac, fire_sprinkler, sheet_metal, elevator, boiler, well_drilling, appliance, electrical_sign"}],"responses":{"200":{"description":"listings[]"},"400":{"description":"invalid_request: detail names the field"},"401":{"description":"unauthorized: missing, invalid or revoked key"},"402":{"description":"upgrade_required (no active plan), credits_exhausted (period pool used up) or payment_required (last charge failed); body carries an `upgrade` URL"},"429":{"description":"rate_limited (120/min per workspace). Every response carries RateLimit-Limit/Remaining/Reset/Policy; a 429 adds Retry-After"}}}},"/v1/county/forecast":{"get":{"summary":"Project-demand forecast for a county and trade: modeled construction-labor demand from the public project record against current and projected licensed supply, by period. Costs 10 credits per call (quick); the response carries X-ATI-Credits-Charged and X-ATI-Credits-Remaining. Enterprise labor module only.","security":[{"bearerAuth":[]}],"parameters":[{"name":"fips","in":"query","required":false,"schema":{"type":"string"},"description":"5-digit county FIPS (or give state + county)"},{"name":"state","in":"query","required":false,"schema":{"type":"string"},"description":"Two-letter state (TX) or a metro key (NYC)"},{"name":"county","in":"query","required":false,"schema":{"type":"string"},"description":"County name, used with state when fips is not given"},{"name":"trade","in":"query","required":true,"schema":{"type":"string"},"description":"Trade key: electrical, plumbing, hvac, fire_sprinkler, sheet_metal, elevator, boiler, well_drilling, appliance, electrical_sign"}],"responses":{"200":{"description":"periods[] with demand, supply, surplus and coverage"},"400":{"description":"invalid_request: detail names the field"},"401":{"description":"unauthorized: missing, invalid or revoked key"},"402":{"description":"upgrade_required (no active plan), credits_exhausted (period pool used up) or payment_required (last charge failed); body carries an `upgrade` URL"},"429":{"description":"rate_limited (120/min per workspace). Every response carries RateLimit-Limit/Remaining/Reset/Policy; a 429 adds Retry-After"}}}},"/v1/county/forecast/compare":{"get":{"summary":"Compare two forecast vintages for a county and trade. Costs 10 credits per call (quick); the response carries X-ATI-Credits-Charged and X-ATI-Credits-Remaining. Enterprise labor module only.","security":[{"bearerAuth":[]}],"parameters":[{"name":"fips","in":"query","required":false,"schema":{"type":"string"},"description":"5-digit county FIPS (or give state + county)"},{"name":"state","in":"query","required":false,"schema":{"type":"string"},"description":"Two-letter state (TX) or a metro key (NYC)"},{"name":"county","in":"query","required":false,"schema":{"type":"string"},"description":"County name, used with state when fips is not given"},{"name":"trade","in":"query","required":true,"schema":{"type":"string"},"description":"Trade key: electrical, plumbing, hvac, fire_sprinkler, sheet_metal, elevator, boiler, well_drilling, appliance, electrical_sign"},{"name":"old_as_of","in":"query","required":true,"schema":{},"description":"YYYY-MM-DD"},{"name":"new_as_of","in":"query","required":true,"schema":{},"description":"YYYY-MM-DD"}],"responses":{"200":{"description":"by period: old vs new"},"400":{"description":"invalid_request: detail names the field"},"401":{"description":"unauthorized: missing, invalid or revoked key"},"402":{"description":"upgrade_required (no active plan), credits_exhausted (period pool used up) or payment_required (last charge failed); body carries an `upgrade` URL"},"429":{"description":"rate_limited (120/min per workspace). Every response carries RateLimit-Limit/Remaining/Reset/Policy; a 429 adds Retry-After"}}}},"/v1/county/project-changes":{"get":{"summary":"Recent changes to the public project record for a county. Costs 10 credits per call (quick); the response carries X-ATI-Credits-Charged and X-ATI-Credits-Remaining.","security":[{"bearerAuth":[]}],"parameters":[{"name":"fips","in":"query","required":false,"schema":{"type":"string"},"description":"5-digit county FIPS (or give state + county)"},{"name":"state","in":"query","required":false,"schema":{"type":"string"},"description":"Two-letter state (TX) or a metro key (NYC)"},{"name":"county","in":"query","required":false,"schema":{"type":"string"},"description":"County name, used with state when fips is not given"},{"name":"since_days","in":"query","required":false,"schema":{"type":"integer"},"description":"1-365 (default 30)"}],"responses":{"200":{"description":"events[]"},"400":{"description":"invalid_request: detail names the field"},"401":{"description":"unauthorized: missing, invalid or revoked key"},"402":{"description":"upgrade_required (no active plan), credits_exhausted (period pool used up) or payment_required (last charge failed); body carries an `upgrade` URL"},"429":{"description":"rate_limited (120/min per workspace). Every response carries RateLimit-Limit/Remaining/Reset/Policy; a 429 adds Retry-After"}}}},"/v1/recommend":{"get":{"summary":"Rank markets for a buyer persona and trade (the recommendation engine). Costs 80 credits per call (deep); the response carries X-ATI-Credits-Charged and X-ATI-Credits-Remaining. Enterprise labor module only.","security":[{"bearerAuth":[]}],"parameters":[{"name":"persona","in":"query","required":true,"schema":{},"description":"operator | investor | staffing | distributor | government"},{"name":"trade","in":"query","required":true,"schema":{"type":"string"},"description":"Trade key: electrical, plumbing, hvac, fire_sprinkler, sheet_metal, elevator, boiler, well_drilling, appliance, electrical_sign"},{"name":"candidate","in":"query","required":false,"schema":{"type":"string"},"description":"Comma-separated 5-digit FIPS to rank among"},{"name":"state","in":"query","required":false,"schema":{"type":"string"},"description":"Two-letter state (TX) or a metro key (NYC)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50},"description":"Rows to return (max 50)"}],"responses":{"200":{"description":"markets[] with score and drivers"},"400":{"description":"invalid_request: detail names the field"},"401":{"description":"unauthorized: missing, invalid or revoked key"},"402":{"description":"upgrade_required (no active plan), credits_exhausted (period pool used up) or payment_required (last charge failed); body carries an `upgrade` URL"},"429":{"description":"rate_limited (120/min per workspace). Every response carries RateLimit-Limit/Remaining/Reset/Policy; a 429 adds Retry-After"}}}},"/v1/recommend/feasibility":{"get":{"summary":"Size a project against one market: can this county absorb N workers of this trade? Share of the workforce, nearby markets, the 24-month outlook. Costs 30 credits per call (research); the response carries X-ATI-Credits-Charged and X-ATI-Credits-Remaining. Enterprise labor module only.","security":[{"bearerAuth":[]}],"parameters":[{"name":"fips","in":"query","required":false,"schema":{"type":"string"},"description":"5-digit county FIPS (or give state + county)"},{"name":"state","in":"query","required":false,"schema":{"type":"string"},"description":"Two-letter state (TX) or a metro key (NYC)"},{"name":"county","in":"query","required":false,"schema":{"type":"string"},"description":"County name, used with state when fips is not given"},{"name":"trade","in":"query","required":true,"schema":{"type":"string"},"description":"Trade key: electrical, plumbing, hvac, fire_sprinkler, sheet_metal, elevator, boiler, well_drilling, appliance, electrical_sign"},{"name":"workers","in":"query","required":true,"schema":{"type":"integer"},"description":"Peak workers the project needs"}],"responses":{"200":{"description":"feasibility read"},"400":{"description":"invalid_request: detail names the field"},"401":{"description":"unauthorized: missing, invalid or revoked key"},"402":{"description":"upgrade_required (no active plan), credits_exhausted (period pool used up) or payment_required (last charge failed); body carries an `upgrade` URL"},"429":{"description":"rate_limited (120/min per workspace). Every response carries RateLimit-Limit/Remaining/Reset/Policy; a 429 adds Retry-After"}}}},"/v1/prospects":{"get":{"summary":"Licensees as a prospect list (tier, county, recent activity), JSON or CSV up to 5,000 rows. Costs 30 credits per call (research); the response carries X-ATI-Credits-Charged and X-ATI-Credits-Remaining.","security":[{"bearerAuth":[]}],"parameters":[{"name":"state","in":"query","required":true,"schema":{"type":"string"},"description":"Two-letter state (TX) or a metro key (NYC)"},{"name":"trade","in":"query","required":false,"schema":{"type":"string"},"description":"Trade key: electrical, plumbing, hvac, fire_sprinkler, sheet_metal, elevator, boiler, well_drilling, appliance, electrical_sign"},{"name":"county","in":"query","required":false,"schema":{"type":"string"},"description":"County name, used with state when fips is not given"},{"name":"county_fips","in":"query","required":false,"schema":{"type":"string"},"description":"5-digit FIPS"},{"name":"metro","in":"query","required":false,"schema":{"type":"string"},"description":"Metro name"},{"name":"min_tier","in":"query","required":false,"schema":{"type":"integer"},"description":"0-9"},{"name":"active","in":"query","required":false,"schema":{"type":"integer"},"description":"1 = active only"},{"name":"since_days","in":"query","required":false,"schema":{"type":"integer"},"description":"Licensed/changed within N days"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":5000},"description":"Rows to return (max 5000)"},{"name":"format","in":"query","required":false,"schema":{"type":"string","enum":["json","csv"]},"description":"json (default) or csv"}],"responses":{"200":{"description":"prospects[] (or CSV)"},"400":{"description":"invalid_request: detail names the field"},"401":{"description":"unauthorized: missing, invalid or revoked key"},"402":{"description":"upgrade_required (no active plan), credits_exhausted (period pool used up) or payment_required (last charge failed); body carries an `upgrade` URL"},"429":{"description":"rate_limited (120/min per workspace). Every response carries RateLimit-Limit/Remaining/Reset/Policy; a 429 adds Retry-After"}}}},"/v1/projects":{"get":{"summary":"Search capital projects: what is being built, where, by whom, and its value, stage and capacity. Each project lists its named builders. Filter by state, county, project type (archetype), owner, builder, minimum capex or capacity, and commitment stage. Free.","security":[{"bearerAuth":[]}],"parameters":[{"name":"state","in":"query","required":false,"schema":{"type":"string"},"description":"Two-letter state"},{"name":"county_fips","in":"query","required":false,"schema":{"type":"string"},"description":"5-digit county FIPS"},{"name":"cbsa","in":"query","required":false,"schema":{"type":"string"},"description":"5-digit CBSA code: every county in a metro"},{"name":"archetype","in":"query","required":false,"schema":{"type":"string"},"description":"Project type, e.g. data_center"},{"name":"owner","in":"query","required":false,"schema":{"type":"string"},"description":"Owner name contains"},{"name":"builder","in":"query","required":false,"schema":{"type":"string"},"description":"A company named on the project as general contractor, contractor, architect/engineer, supplier or developer"},{"name":"include_incentive_awards","in":"query","required":false,"schema":{"type":"string"},"description":"true to include incentive awards to companies (a subsidy record named for the company rather than a project); excluded by default and counted in incentive_awards_excluded"},{"name":"min_capex_usd","in":"query","required":false,"schema":{"type":"string"},"description":"Minimum capital value, USD"},{"name":"min_capacity_mw","in":"query","required":false,"schema":{"type":"string"},"description":"Minimum capacity, MW"},{"name":"commitment_stage","in":"query","required":false,"schema":{"type":"string"},"description":"committed | planned | unknown"},{"name":"stage","in":"query","required":false,"schema":{"type":"string"},"description":"announced | planned | funded | permitted | awarded | under_construction | complete (comma list); each project carries stage, stage_date and stage_basis"},{"name":"stage_since","in":"query","required":false,"schema":{"type":"string"},"description":"YYYY-MM-DD: only projects whose current stage was stated since then"},{"name":"sort","in":"query","required":false,"schema":{"type":"string"},"description":"capacity | capex | workers | name | recent (newest stage first)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200},"description":"Rows to return (max 200)"},{"name":"offset","in":"query","required":false,"schema":{"type":"string"},"description":"Paging offset"}],"responses":{"200":{"description":"projects[]"},"400":{"description":"invalid_request: detail names the field"},"401":{"description":"unauthorized: missing, invalid or revoked key"},"402":{"description":"upgrade_required (no active plan), credits_exhausted (period pool used up) or payment_required (last charge failed); body carries an `upgrade` URL"},"429":{"description":"rate_limited (120/min per workspace). Every response carries RateLimit-Limit/Remaining/Reset/Policy; a 429 adds Retry-After"}}}},"/v1/companies":{"get":{"summary":"Discover contractors in a state: by trade, size, formation date, diversification, expansion and the projects they are named on. Each row carries signals: employees and industry where known, projects named, and a contact where one passes ATI's match bar. Costs 30 credits per call (research); the response carries X-ATI-Credits-Charged and X-ATI-Credits-Remaining.","security":[{"bearerAuth":[]}],"parameters":[{"name":"state","in":"query","required":false,"schema":{"type":"string"},"description":"Two-letter state; optional when county_fips is given"},{"name":"trade","in":"query","required":false,"schema":{"type":"string"},"description":"Trade key: electrical, plumbing, hvac, fire_sprinkler, sheet_metal, elevator, boiler, well_drilling, appliance, electrical_sign"},{"name":"sort","in":"query","required":false,"schema":{"type":"string"},"description":"active | licenses | newest | diversified | expanding | projects"},{"name":"min_tier","in":"query","required":false,"schema":{"type":"integer"},"description":"0-9"},{"name":"formed_since","in":"query","required":false,"schema":{"type":"string"},"description":"YYYY-MM-DD"},{"name":"firms_only","in":"query","required":false,"schema":{"type":"string"},"description":"true (default) | false"},{"name":"county_fips","in":"query","required":false,"schema":{"type":"string"},"description":"5-digit county FIPS: only firms licensed in that county"},{"name":"cbsa","in":"query","required":false,"schema":{"type":"string"},"description":"5-digit CBSA: only firms licensed in that metro's counties"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200},"description":"Rows to return (max 200)"},{"name":"format","in":"query","required":false,"schema":{"type":"string","enum":["json","csv"]},"description":"json (default) or csv"}],"responses":{"200":{"description":"companies[] (or CSV)"},"400":{"description":"invalid_request: detail names the field"},"401":{"description":"unauthorized: missing, invalid or revoked key"},"402":{"description":"upgrade_required (no active plan), credits_exhausted (period pool used up) or payment_required (last charge failed); body carries an `upgrade` URL"},"429":{"description":"rate_limited (120/min per workspace). Every response carries RateLimit-Limit/Remaining/Reset/Policy; a 429 adds Retry-After"}}}},"/v1/company":{"get":{"summary":"One company in full: every license it holds, trades, tiers, counties, tenure, and (AZ, CA, FL, LA, NC, OH) its single-qualifier continuity risk. Costs 10 credits per call (quick); the response carries X-ATI-Credits-Charged and X-ATI-Credits-Remaining.","security":[{"bearerAuth":[]}],"parameters":[{"name":"state","in":"query","required":true,"schema":{"type":"string"},"description":"Two-letter state (TX) or a metro key (NYC)"},{"name":"name","in":"query","required":false,"schema":{"type":"string"},"description":"Company name"},{"name":"license","in":"query","required":false,"schema":{"type":"string"},"description":"Any license number it holds"}],"responses":{"200":{"description":"company profile"},"400":{"description":"invalid_request: detail names the field"},"401":{"description":"unauthorized: missing, invalid or revoked key"},"402":{"description":"upgrade_required (no active plan), credits_exhausted (period pool used up) or payment_required (last charge failed); body carries an `upgrade` URL"},"429":{"description":"rate_limited (120/min per workspace). Every response carries RateLimit-Limit/Remaining/Reset/Policy; a 429 adds Retry-After"}}}},"/v1/qualifier":{"get":{"summary":"Qualifier(s) for a company license + single-qualifier risk (AZ, CA, FL, LA, NC, OH). Costs 30 credits per call (research); the response carries X-ATI-Credits-Charged and X-ATI-Credits-Remaining.","security":[{"bearerAuth":[]}],"parameters":[{"name":"state","in":"query","required":true,"schema":{"type":"string"},"description":"Two-letter state (TX) or a metro key (NYC)"},{"name":"license","in":"query","required":false,"schema":{"type":"string"},"description":"License number"},{"name":"key","in":"query","required":false,"schema":{"type":"string"},"description":"Record key"}],"responses":{"200":{"description":"qualifiers + single_qualifier_dependency"},"400":{"description":"invalid_request: detail names the field"},"401":{"description":"unauthorized: missing, invalid or revoked key"},"402":{"description":"upgrade_required (no active plan), credits_exhausted (period pool used up) or payment_required (last charge failed); body carries an `upgrade` URL"},"429":{"description":"rate_limited (120/min per workspace). Every response carries RateLimit-Limit/Remaining/Reset/Policy; a 429 adds Retry-After"}}}},"/v1/qualifier/risk":{"get":{"summary":"Rank the companies in a market whose license rests on one qualifying individual. Costs 30 credits per call (research); the response carries X-ATI-Credits-Charged and X-ATI-Credits-Remaining.","security":[{"bearerAuth":[]}],"parameters":[{"name":"state","in":"query","required":true,"schema":{"type":"string"},"description":"Two-letter state (TX) or a metro key (NYC)"},{"name":"trade","in":"query","required":false,"schema":{"type":"string"},"description":"Trade key: electrical, plumbing, hvac, fire_sprinkler, sheet_metal, elevator, boiler, well_drilling, appliance, electrical_sign"},{"name":"county","in":"query","required":false,"schema":{"type":"string"},"description":"County name, used with state when fips is not given"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000},"description":"Rows to return (max 1000)"}],"responses":{"200":{"description":"companies[] by risk"},"400":{"description":"invalid_request: detail names the field"},"401":{"description":"unauthorized: missing, invalid or revoked key"},"402":{"description":"upgrade_required (no active plan), credits_exhausted (period pool used up) or payment_required (last charge failed); body carries an `upgrade` URL"},"429":{"description":"rate_limited (120/min per workspace). Every response carries RateLimit-Limit/Remaining/Reset/Policy; a 429 adds Retry-After"}}}},"/v1/qualifier/person":{"get":{"summary":"Every license a named individual qualifies. Costs 30 credits per call (research); the response carries X-ATI-Credits-Charged and X-ATI-Credits-Remaining.","security":[{"bearerAuth":[]}],"parameters":[{"name":"state","in":"query","required":true,"schema":{"type":"string"},"description":"Two-letter state (TX) or a metro key (NYC)"},{"name":"name","in":"query","required":true,"schema":{},"description":"Person name"}],"responses":{"200":{"description":"licenses[]"},"400":{"description":"invalid_request: detail names the field"},"401":{"description":"unauthorized: missing, invalid or revoked key"},"402":{"description":"upgrade_required (no active plan), credits_exhausted (period pool used up) or payment_required (last charge failed); body carries an `upgrade` URL"},"429":{"description":"rate_limited (120/min per workspace). Every response carries RateLimit-Limit/Remaining/Reset/Policy; a 429 adds Retry-After"}}}},"/v1/trend":{"get":{"summary":"The weekly workforce time series for a state (or county) and trade. Costs 10 credits per call (quick); the response carries X-ATI-Credits-Charged and X-ATI-Credits-Remaining.","security":[{"bearerAuth":[]}],"parameters":[{"name":"state","in":"query","required":true,"schema":{"type":"string"},"description":"Two-letter state (TX) or a metro key (NYC)"},{"name":"trade","in":"query","required":true,"schema":{"type":"string"},"description":"Trade key: electrical, plumbing, hvac, fire_sprinkler, sheet_metal, elevator, boiler, well_drilling, appliance, electrical_sign"},{"name":"metric","in":"query","required":false,"schema":{"type":"string"},"description":"e.g. supply_active"},{"name":"county","in":"query","required":false,"schema":{"type":"string"},"description":"County name, used with state when fips is not given"},{"name":"window_months","in":"query","required":false,"schema":{"type":"number"},"description":"Last N months"}],"responses":{"200":{"description":"series[] with depth in weeks"},"400":{"description":"invalid_request: detail names the field"},"401":{"description":"unauthorized: missing, invalid or revoked key"},"402":{"description":"upgrade_required (no active plan), credits_exhausted (period pool used up) or payment_required (last charge failed); body carries an `upgrade` URL"},"429":{"description":"rate_limited (120/min per workspace). Every response carries RateLimit-Limit/Remaining/Reset/Policy; a 429 adds Retry-After"}}}},"/v1/trajectory":{"get":{"summary":"Market trajectory: the observed workforce trend and what it implies for the next 24 months. Costs 30 credits per call (research); the response carries X-ATI-Credits-Charged and X-ATI-Credits-Remaining. Enterprise labor module only.","security":[{"bearerAuth":[]}],"parameters":[{"name":"fips","in":"query","required":false,"schema":{"type":"string"},"description":"5-digit county FIPS (or give state + county)"},{"name":"state","in":"query","required":false,"schema":{"type":"string"},"description":"Two-letter state (TX) or a metro key (NYC)"},{"name":"county","in":"query","required":false,"schema":{"type":"string"},"description":"County name, used with state when fips is not given"},{"name":"trade","in":"query","required":true,"schema":{"type":"string"},"description":"Trade key: electrical, plumbing, hvac, fire_sprinkler, sheet_metal, elevator, boiler, well_drilling, appliance, electrical_sign"}],"responses":{"200":{"description":"trajectory"},"400":{"description":"invalid_request: detail names the field"},"401":{"description":"unauthorized: missing, invalid or revoked key"},"402":{"description":"upgrade_required (no active plan), credits_exhausted (period pool used up) or payment_required (last charge failed); body carries an `upgrade` URL"},"429":{"description":"rate_limited (120/min per workspace). Every response carries RateLimit-Limit/Remaining/Reset/Policy; a 429 adds Retry-After"}}}},"/v1/screen":{"get":{"summary":"Screen every county for a trade, sorted by one metric. Costs 80 credits per call (deep); the response carries X-ATI-Credits-Charged and X-ATI-Credits-Remaining.","security":[{"bearerAuth":[]}],"parameters":[{"name":"trade","in":"query","required":true,"schema":{"type":"string"},"description":"Trade key: electrical, plumbing, hvac, fire_sprinkler, sheet_metal, elevator, boiler, well_drilling, appliance, electrical_sign"},{"name":"state","in":"query","required":false,"schema":{"type":"string"},"description":"Two-letter state (TX) or a metro key (NYC)"},{"name":"sort","in":"query","required":false,"schema":{"type":"string"},"description":"Metric to sort by"},{"name":"dir","in":"query","required":false,"schema":{"type":"string"},"description":"desc | asc"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":400},"description":"Rows to return (max 400)"},{"name":"format","in":"query","required":false,"schema":{"type":"string","enum":["json","csv"]},"description":"json (default) or csv"}],"responses":{"200":{"description":"counties[]"},"400":{"description":"invalid_request: detail names the field"},"401":{"description":"unauthorized: missing, invalid or revoked key"},"402":{"description":"upgrade_required (no active plan), credits_exhausted (period pool used up) or payment_required (last charge failed); body carries an `upgrade` URL"},"429":{"description":"rate_limited (120/min per workspace). Every response carries RateLimit-Limit/Remaining/Reset/Policy; a 429 adds Retry-After"}}},"post":{"summary":"Screen with up to six metric filters (supply, tightness, wages, pipeline, ...) and a sort; CSV export. Costs 80 credits per call (deep); the response carries X-ATI-Credits-Charged and X-ATI-Credits-Remaining.","security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["trade"],"properties":{"trade":{"type":"string"},"state":{"type":"string"},"filters":{"type":"array","items":{"type":"object","properties":{"metric":{"type":"string"},"op":{"type":"string","enum":["gte","lte","gt","lt"]},"value":{"type":"number"}}}},"sort":{"type":"object","properties":{"metric":{"type":"string"},"dir":{"type":"string","enum":["desc","asc"]}}},"limit":{"type":"integer","maximum":400},"format":{"type":"string","enum":["json","csv"]}}}}}},"responses":{"200":{"description":"counties[] (or CSV)"},"400":{"description":"invalid_request: detail names the field"},"401":{"description":"unauthorized: missing, invalid or revoked key"},"402":{"description":"upgrade_required (no active plan), credits_exhausted (period pool used up) or payment_required (last charge failed); body carries an `upgrade` URL"},"429":{"description":"rate_limited (120/min per workspace). Every response carries RateLimit-Limit/Remaining/Reset/Policy; a 429 adds Retry-After"}}}},"/v1/screen/metrics":{"get":{"summary":"The metrics /v1/screen accepts. Costs 30 credits per call (research); the response carries X-ATI-Credits-Charged and X-ATI-Credits-Remaining.","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"metrics[]"},"400":{"description":"invalid_request: detail names the field"},"401":{"description":"unauthorized: missing, invalid or revoked key"},"402":{"description":"upgrade_required (no active plan), credits_exhausted (period pool used up) or payment_required (last charge failed); body carries an `upgrade` URL"},"429":{"description":"rate_limited (120/min per workspace). Every response carries RateLimit-Limit/Remaining/Reset/Policy; a 429 adds Retry-After"}}}},"/v1/coverage":{"get":{"summary":"What ATI can and cannot see of the U.S. project universe: registered sources by family with project counts and known capex, the state x sector coverage matrix, archetypes observed but NOT modeled with the blocker reason for each, per-jurisdiction disclosed gaps, the latest capture-recall benchmark and the current top blind spots. Every denominator is what ATI has observed from public sources, never total U.S. investment. Costs 30 credits per call (research); the response carries X-ATI-Credits-Charged and X-ATI-Credits-Remaining.","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"sources, coverage_matrix, models, jurisdictions, recall_benchmark, blind_spots_top"},"400":{"description":"invalid_request: detail names the field"},"401":{"description":"unauthorized: missing, invalid or revoked key"},"402":{"description":"upgrade_required (no active plan), credits_exhausted (period pool used up) or payment_required (last charge failed); body carries an `upgrade` URL"},"429":{"description":"rate_limited (120/min per workspace). Every response carries RateLimit-Limit/Remaining/Reset/Policy; a 429 adds Retry-After"}}}},"/v1/insights":{"get":{"summary":"Proactive findings: fastest growth and decline, apprentice pipeline, master scarcity. Pass `state` to narrow to one state; it returns no findings rather than one about somewhere else, and an empty result is not charged. Costs 30 credits per call (research); the response carries X-ATI-Credits-Charged and X-ATI-Credits-Remaining.","security":[{"bearerAuth":[]}],"parameters":[{"name":"trade","in":"query","required":false,"schema":{"type":"string"},"description":"Trade key: electrical, plumbing, hvac, fire_sprinkler, sheet_metal, elevator, boiler, well_drilling, appliance, electrical_sign"},{"name":"state","in":"query","required":false,"schema":{"type":"string"},"description":"Two-letter state (TX) or a metro key (NYC)"}],"responses":{"200":{"description":"insights[] with headline + detail"},"400":{"description":"invalid_request: detail names the field"},"401":{"description":"unauthorized: missing, invalid or revoked key"},"402":{"description":"upgrade_required (no active plan), credits_exhausted (period pool used up) or payment_required (last charge failed); body carries an `upgrade` URL"},"429":{"description":"rate_limited (120/min per workspace). Every response carries RateLimit-Limit/Remaining/Reset/Policy; a 429 adds Retry-After"}}}},"/v1/workers/search":{"get":{"summary":"Search consented tradespeople who opted in to be contacted (trade, state, radius, availability). Costs 30 credits per call (research); the response carries X-ATI-Credits-Charged and X-ATI-Credits-Remaining.","security":[{"bearerAuth":[]}],"parameters":[{"name":"trade","in":"query","required":false,"schema":{"type":"string"},"description":"Trade key: electrical, plumbing, hvac, fire_sprinkler, sheet_metal, elevator, boiler, well_drilling, appliance, electrical_sign"},{"name":"state","in":"query","required":false,"schema":{"type":"string"},"description":"Two-letter state (TX) or a metro key (NYC)"},{"name":"center_county_fips","in":"query","required":false,"schema":{"type":"string"},"description":"FIPS at the centre of a radius search"},{"name":"radius_miles","in":"query","required":false,"schema":{"type":"integer"},"description":"Requires center_county_fips"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100},"description":"Rows to return (max 100)"}],"responses":{"200":{"description":"results[], total"},"400":{"description":"invalid_request: detail names the field"},"401":{"description":"unauthorized: missing, invalid or revoked key"},"402":{"description":"upgrade_required (no active plan), credits_exhausted (period pool used up) or payment_required (last charge failed); body carries an `upgrade` URL"},"429":{"description":"rate_limited (120/min per workspace). Every response carries RateLimit-Limit/Remaining/Reset/Policy; a 429 adds Retry-After"}}}},"/v1/workers/{id}":{"get":{"summary":"One consented worker in full (contact details included). Costs 10 credits per call (quick); the response carries X-ATI-Credits-Charged and X-ATI-Credits-Remaining.","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"worker"},"400":{"description":"invalid_request: detail names the field"},"401":{"description":"unauthorized: missing, invalid or revoked key"},"402":{"description":"upgrade_required (no active plan), credits_exhausted (period pool used up) or payment_required (last charge failed); body carries an `upgrade` URL"},"404":{"description":"not found, or consent withdrawn"},"429":{"description":"rate_limited (120/min per workspace). Every response carries RateLimit-Limit/Remaining/Reset/Policy; a 429 adds Retry-After"}}}},"/v1/workers/{id}/contact":{"post":{"summary":"Record that you contacted this worker (audited). Free.","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"ok"},"400":{"description":"invalid_request: detail names the field"},"401":{"description":"unauthorized: missing, invalid or revoked key"},"402":{"description":"upgrade_required (no active plan), credits_exhausted (period pool used up) or payment_required (last charge failed); body carries an `upgrade` URL"},"429":{"description":"rate_limited (120/min per workspace). Every response carries RateLimit-Limit/Remaining/Reset/Policy; a 429 adds Retry-After"}}}},"/v1/chart":{"post":{"summary":"Render a bar or line chart (SVG or PNG) from your own series. Free.","security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["kind","series"],"properties":{"kind":{"type":"string","enum":["bar","line"]},"title":{"type":"string"},"subtitle":{"type":"string"},"unit":{"type":"string"},"source":{"type":"string"},"series":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"value":{"type":"number"}}}}}}}}},"parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string"},"description":"svg to get the SVG text"}],"responses":{"200":{"description":"chart"},"400":{"description":"invalid_request: detail names the field"},"401":{"description":"unauthorized: missing, invalid or revoked key"},"402":{"description":"upgrade_required (no active plan), credits_exhausted (period pool used up) or payment_required (last charge failed); body carries an `upgrade` URL"},"429":{"description":"rate_limited (120/min per workspace). Every response carries RateLimit-Limit/Remaining/Reset/Policy; a 429 adds Retry-After"}}}},"/v1/tracked":{"get":{"summary":"The workspace watchlist: each market with its current value and the gated delta since the last comparable reading. Free.","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"tracked[]"},"400":{"description":"invalid_request: detail names the field"},"401":{"description":"unauthorized: missing, invalid or revoked key"},"402":{"description":"upgrade_required (no active plan), credits_exhausted (period pool used up) or payment_required (last charge failed); body carries an `upgrade` URL"},"429":{"description":"rate_limited (120/min per workspace). Every response carries RateLimit-Limit/Remaining/Reset/Policy; a 429 adds Retry-After"}}},"post":{"summary":"Watch a market (captures a baseline now). Free and unlimited on every tier.","security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["label","kind"],"properties":{"label":{"type":"string"},"kind":{"type":"string","enum":["projects","project","company","supply","movement","rankings","county","outlook","screen"]},"params":{"type":"object","description":"projects: {state and/or fips|county|cbsa, watch:\"projects\"} (a territory's projects and the week's new stage events); project: {project_id, name}; company: {company_key, name}; supply/movement: {state, trade, county?|metro?}; county/outlook: {fips|state+county, trade}; rankings: {trade, metric}; screen: the screen filters"},"folder_id":{"type":"string"}}}}}},"responses":{"200":{"description":"tracked item"},"400":{"description":"invalid_request: detail names the field"},"401":{"description":"unauthorized: missing, invalid or revoked key"},"402":{"description":"upgrade_required (no active plan), credits_exhausted (period pool used up) or payment_required (last charge failed); body carries an `upgrade` URL"},"429":{"description":"rate_limited (120/min per workspace). Every response carries RateLimit-Limit/Remaining/Reset/Policy; a 429 adds Retry-After"}}}},"/v1/saved":{"get":{"summary":"The workspace's saved projects and companies. format=csv returns them as a call list re-read from the live corpus (stage, builders, contact). Free.","security":[{"bearerAuth":[]}],"parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string"},"description":"json (default) | csv"}],"responses":{"200":{"description":"saved[]"},"400":{"description":"invalid_request: detail names the field"},"401":{"description":"unauthorized: missing, invalid or revoked key"},"402":{"description":"upgrade_required (no active plan), credits_exhausted (period pool used up) or payment_required (last charge failed); body carries an `upgrade` URL"},"429":{"description":"rate_limited (120/min per workspace). Every response carries RateLimit-Limit/Remaining/Reset/Policy; a 429 adds Retry-After"}}},"post":{"summary":"Save a project (kind=project, ref=project id) or a company (kind=company, ref=company_key). Idempotent per workspace: 201 when saved, 200 when it was already saved. Free.","security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["kind","ref"],"properties":{"kind":{"type":"string","enum":["project","company"]},"ref":{"type":"string"},"note":{"type":"string"}}}}}},"responses":{"200":{"description":"saved item (already saved)"},"201":{"description":"saved item (newly saved)"},"400":{"description":"invalid_request: detail names the field"},"401":{"description":"unauthorized: missing, invalid or revoked key"},"402":{"description":"upgrade_required (no active plan), credits_exhausted (period pool used up) or payment_required (last charge failed); body carries an `upgrade` URL"},"404":{"description":"not_found: no project with that id, or no company with that key"},"429":{"description":"rate_limited (120/min per workspace). Every response carries RateLimit-Limit/Remaining/Reset/Policy; a 429 adds Retry-After"}}}},"/v1/saved/{id}":{"patch":{"summary":"Mark a call-list item done or open again, or change its note.","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["open","done"]},"note":{"type":"string","nullable":true,"description":"up to 1,000 characters"}}}}}},"responses":{"200":{"description":"saved item"},"400":{"description":"invalid_request: detail names the field"},"401":{"description":"unauthorized: missing, invalid or revoked key"},"402":{"description":"upgrade_required (no active plan), credits_exhausted (period pool used up) or payment_required (last charge failed); body carries an `upgrade` URL"},"429":{"description":"rate_limited (120/min per workspace). Every response carries RateLimit-Limit/Remaining/Reset/Policy; a 429 adds Retry-After"}}},"delete":{"summary":"Remove a saved item.","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"{deleted: true}"},"400":{"description":"invalid_request: detail names the field"},"401":{"description":"unauthorized: missing, invalid or revoked key"},"402":{"description":"upgrade_required (no active plan), credits_exhausted (period pool used up) or payment_required (last charge failed); body carries an `upgrade` URL"},"429":{"description":"rate_limited (120/min per workspace). Every response carries RateLimit-Limit/Remaining/Reset/Policy; a 429 adds Retry-After"}}}},"/v1/tracked/{id}":{"get":{"summary":"One watched market in full.","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"tracked item"},"400":{"description":"invalid_request: detail names the field"},"401":{"description":"unauthorized: missing, invalid or revoked key"},"402":{"description":"upgrade_required (no active plan), credits_exhausted (period pool used up) or payment_required (last charge failed); body carries an `upgrade` URL"},"429":{"description":"rate_limited (120/min per workspace). Every response carries RateLimit-Limit/Remaining/Reset/Policy; a 429 adds Retry-After"}}},"patch":{"summary":"Rename, move to a folder, or change visibility.","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"tracked item"},"400":{"description":"invalid_request: detail names the field"},"401":{"description":"unauthorized: missing, invalid or revoked key"},"402":{"description":"upgrade_required (no active plan), credits_exhausted (period pool used up) or payment_required (last charge failed); body carries an `upgrade` URL"},"429":{"description":"rate_limited (120/min per workspace). Every response carries RateLimit-Limit/Remaining/Reset/Policy; a 429 adds Retry-After"}}},"delete":{"summary":"Stop watching a market.","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"deleted"},"400":{"description":"invalid_request: detail names the field"},"401":{"description":"unauthorized: missing, invalid or revoked key"},"402":{"description":"upgrade_required (no active plan), credits_exhausted (period pool used up) or payment_required (last charge failed); body carries an `upgrade` URL"},"429":{"description":"rate_limited (120/min per workspace). Every response carries RateLimit-Limit/Remaining/Reset/Policy; a 429 adds Retry-After"}}}},"/v1/tracked/{id}/records":{"get":{"summary":"The underlying license records behind a watched market.","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"records[]"},"400":{"description":"invalid_request: detail names the field"},"401":{"description":"unauthorized: missing, invalid or revoked key"},"402":{"description":"upgrade_required (no active plan), credits_exhausted (period pool used up) or payment_required (last charge failed); body carries an `upgrade` URL"},"429":{"description":"rate_limited (120/min per workspace). Every response carries RateLimit-Limit/Remaining/Reset/Policy; a 429 adds Retry-After"}}}},"/v1/workspace":{"get":{"summary":"Your workspace: plan, seats, members, and your role (ATI Pro is one person; teams and more seats are Enterprise).","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"workspace"},"400":{"description":"invalid_request: detail names the field"},"401":{"description":"unauthorized: missing, invalid or revoked key"},"402":{"description":"upgrade_required (no active plan), credits_exhausted (period pool used up) or payment_required (last charge failed); body carries an `upgrade` URL"},"429":{"description":"rate_limited (120/min per workspace). Every response carries RateLimit-Limit/Remaining/Reset/Policy; a 429 adds Retry-After"}}},"patch":{"summary":"Rename the workspace (owner only).","security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["name"],"properties":{"name":{"type":"string","description":"1-80 characters"}}}}}},"responses":{"200":{"description":"ok"},"400":{"description":"invalid_request: detail names the field"},"401":{"description":"unauthorized: missing, invalid or revoked key"},"402":{"description":"upgrade_required (no active plan), credits_exhausted (period pool used up) or payment_required (last charge failed); body carries an `upgrade` URL"},"403":{"description":"owner only"},"429":{"description":"rate_limited (120/min per workspace). Every response carries RateLimit-Limit/Remaining/Reset/Policy; a 429 adds Retry-After"}}}},"/v1/workspace/invite":{"post":{"summary":"Invite a teammate to this workspace (owner only). Emails them the invite and also returns the link to share by hand. Enterprise workspaces only: ATI Pro is one person.","security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["email"],"properties":{"email":{"type":"string"}}}}}},"responses":{"200":{"description":"{token, url, email, emailed} (201)"},"400":{"description":"invalid email, or that person is already in this workspace"},"401":{"description":"unauthorized: missing, invalid or revoked key"},"402":{"description":"upgrade_required (no active plan), credits_exhausted (period pool used up) or payment_required (last charge failed); body carries an `upgrade` URL"},"403":{"description":"owner only, or single_seat_plan (ATI Pro is one person; teams are Enterprise)"},"429":{"description":"rate_limited (120/min per workspace). Every response carries RateLimit-Limit/Remaining/Reset/Policy; a 429 adds Retry-After"}}}},"/v1/workspace/accept":{"post":{"summary":"Accept an invite and receive your own key for the shared workspace. PUBLIC: the token from the invite link is the credential, so no API key is needed. Single-use and valid for 7 days.","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["token"],"properties":{"token":{"type":"string","description":"the token from the invite URL"}}}}}},"responses":{"200":{"description":"{api_key, account_id, name, email}; the key is shown once"},"400":{"description":"the link is invalid, expired, or already used (one message for all three, by design)"}}}},"/v1/workspace/members/remove":{"post":{"summary":"Remove a member and revoke their keys (owner only). The owner cannot be removed.","security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["email"],"properties":{"email":{"type":"string"}}}}}},"responses":{"200":{"description":"{removed:true}"},"400":{"description":"invalid_request: detail names the field"},"401":{"description":"unauthorized: missing, invalid or revoked key"},"402":{"description":"upgrade_required (no active plan), credits_exhausted (period pool used up) or payment_required (last charge failed); body carries an `upgrade` URL"},"403":{"description":"owner only"},"404":{"description":"no such member, or it is the owner"},"429":{"description":"rate_limited (120/min per workspace). Every response carries RateLimit-Limit/Remaining/Reset/Policy; a 429 adds Retry-After"}}}},"/v1/workspace/leave":{"post":{"summary":"Leave the workspace (any member except the owner).","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"left"},"400":{"description":"owner cannot leave / not a member"},"401":{"description":"unauthorized: missing, invalid or revoked key"},"402":{"description":"upgrade_required (no active plan), credits_exhausted (period pool used up) or payment_required (last charge failed); body carries an `upgrade` URL"},"429":{"description":"rate_limited (120/min per workspace). Every response carries RateLimit-Limit/Remaining/Reset/Policy; a 429 adds Retry-After"}}}},"/v1/workspace/transfer":{"post":{"summary":"Hand ownership to an active member (owner only).","security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["email"],"properties":{"email":{"type":"string"}}}}}},"responses":{"200":{"description":"transferred"},"400":{"description":"invalid_request: detail names the field"},"401":{"description":"unauthorized: missing, invalid or revoked key"},"402":{"description":"upgrade_required (no active plan), credits_exhausted (period pool used up) or payment_required (last charge failed); body carries an `upgrade` URL"},"403":{"description":"owner only"},"429":{"description":"rate_limited (120/min per workspace). Every response carries RateLimit-Limit/Remaining/Reset/Policy; a 429 adds Retry-After"}}}},"/v1/keys":{"get":{"summary":"List API keys (metadata only).","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"keys[]"},"400":{"description":"invalid_request: detail names the field"},"401":{"description":"unauthorized: missing, invalid or revoked key"},"402":{"description":"upgrade_required (no active plan), credits_exhausted (period pool used up) or payment_required (last charge failed); body carries an `upgrade` URL"},"429":{"description":"rate_limited (120/min per workspace). Every response carries RateLimit-Limit/Remaining/Reset/Policy; a 429 adds Retry-After"}}},"post":{"summary":"Mint an additional key for this workspace (shown once).","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"api_key (once)"},"400":{"description":"invalid_request: detail names the field"},"401":{"description":"unauthorized: missing, invalid or revoked key"},"402":{"description":"upgrade_required (no active plan), credits_exhausted (period pool used up) or payment_required (last charge failed); body carries an `upgrade` URL"},"429":{"description":"rate_limited (120/min per workspace). Every response carries RateLimit-Limit/Remaining/Reset/Policy; a 429 adds Retry-After"}}}},"/v1/keys/{id}":{"delete":{"summary":"Revoke a key.","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"revoked"},"400":{"description":"invalid_request: detail names the field"},"401":{"description":"unauthorized: missing, invalid or revoked key"},"402":{"description":"upgrade_required (no active plan), credits_exhausted (period pool used up) or payment_required (last charge failed); body carries an `upgrade` URL"},"429":{"description":"rate_limited (120/min per workspace). Every response carries RateLimit-Limit/Remaining/Reset/Policy; a 429 adds Retry-After"}}}},"/v1/usage":{"get":{"summary":"Plan, credits {used, remaining, granted, resets_at}, trial status, and checkout_failed when the last charge failed."}},"/v1/plans":{"get":{"summary":"The public plan catalog (prices, credits, trial length). No key needed.","security":[],"responses":{"200":{"description":"plans[]"}}}}}}