{"openapi":"3.1.0","info":{"title":"Cadastre API","version":"1.0.0","summary":"Read-only access to Cadastre's datasets, measures, metro profiles, screens and rankings.","description":"The Cadastre public API, version 1 (beta). The public datasets need no account: a request\nwithout a credential is served anonymously, at 30 requests a minute and 2,000 a day per\nclient address. For higher limits (60 a minute and 10,000 a day per credential) send a\ncredential in `Authorization: Bearer \u003ctoken\u003e`: an OAuth access token (MCP clients and the\nCadastre CLI sign in through the browser) or an API key made on Settings \u003e API keys. A\ncredential acts as one person in one account, with the `read` scope, and reads the same\ndatasets; its higher limits need API access enabled for that account (without it the\ncredential has the anonymous limits). A credential that is not valid is always 401, never\nserved as anonymous. `GET /me` needs a credential, and `GET /incentive_programs` a credential whose\naccount has API access (a paid feature; otherwise 403 `api_access_required`).\n\nEvery successful answer is `{ data, meta?, attribution }`. `attribution` lists the credit\neach dataset behind `data` requires: print it wherever you show the figures. Values marked\n`computed_by_cadastre` are Cadastre's aggregates of the publisher's county figures, or\nfigures Cadastre derived from the publisher's data, not figures the publisher printed.\n\nOnly datasets whose terms Cadastre has approved for the API are served; a dataset that is\nnot is absent from every list and a 404. Parcel data is not part of the API.\n\nNo geometry is served: answers carry names and codes (region ids, CBSA codes, FIPS), never\nboundaries, points or lines. Geometry is not available yet and will only be added on request,\nas its own explicit option, not by default.\n\nEach `attribution` entry carries `retrieved_at`, when Cadastre last retrieved that data from\nits publisher; cite it with the data (BLS asks API users to cite the retrieval date).\n\n`POST /screen` and `POST /rank` compute an answer and save nothing.\n\nUse of the API and of what it returns, with or without an account, is governed by the Terms\nof Service, section \"API, MCP and developer access\" (`/terms#api`).\n\nErrors are `{ error, message }`. 401 carries `WWW-Authenticate: Bearer resource_metadata=\"...\"`\n(RFC 9728); 429 carries `Retry-After`. Every answer carries `RateLimit-Limit`,\n`RateLimit-Remaining` and `RateLimit-Reset`. Anonymous GET answers may be kept by a shared\ncache for a minute (`Cache-Control: public, max-age=60`, `Vary: Authorization`).\n","contact":{"name":"Cadastre"}},"servers":[{"url":"/api/v1"}],"security":[{},{"bearer":[]},{"oauth":["read"]}],"tags":[{"name":"account"},{"name":"datasets"},{"name":"measures"},{"name":"metros"},{"name":"analysis"},{"name":"incentives"}],"paths":{"/me":{"get":{"tags":["account"],"operationId":"getMe","summary":"Who the credential acts as","description":"Needs a credential; without one it is 401 with the sign-in challenge.","security":[{"bearer":[]},{"oauth":["read"]}],"responses":{"200":{"description":"The person, the account, the credential and its access.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Me"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/openapi.json":{"get":{"tags":["account"],"operationId":"getOpenapi","summary":"This description","security":[],"responses":{"200":{"description":"The OpenAPI document.","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/datasets":{"get":{"tags":["datasets"],"operationId":"listDatasets","summary":"The datasets the API serves","responses":{"200":{"description":"The datasets.","content":{"application/json":{"schema":{"type":"object","required":["data","meta","attribution"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Dataset"}},"meta":{"type":"object","required":["total"],"properties":{"total":{"type":"integer"}}},"attribution":{"$ref":"#/components/schemas/AttributionList"}}}}}},"304":{"$ref":"#/components/responses/NotModified"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/datasets/{key}":{"get":{"tags":["datasets"],"operationId":"getDataset","summary":"One dataset, with its measures","parameters":[{"name":"key","in":"path","required":true,"description":"A dataset key, as GET /datasets lists them","schema":{"type":"string","pattern":"^[a-z0-9-]+$"}}],"responses":{"200":{"description":"The dataset.","content":{"application/json":{"schema":{"type":"object","required":["data","attribution"],"properties":{"data":{"allOf":[{"$ref":"#/components/schemas/Dataset"},{"type":"object","required":["measures"],"properties":{"measures":{"type":"array","items":{"$ref":"#/components/schemas/Measure"}}}}]},"attribution":{"$ref":"#/components/schemas/AttributionList"}}}}}},"304":{"$ref":"#/components/responses/NotModified"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/measures":{"get":{"tags":["measures"],"operationId":"listMeasures","summary":"Search the measures","parameters":[{"name":"q","in":"query","description":"Text in the name, label or unit","schema":{"type":"string"}},{"name":"geography","in":"query","description":"Only measures with values at this geography","schema":{"$ref":"#/components/schemas/Geography"}},{"name":"dataset","in":"query","description":"Only this dataset's measures (its key)","schema":{"type":"string"}},{"$ref":"#/components/parameters/Page"},{"$ref":"#/components/parameters/PerPage"}],"responses":{"200":{"description":"A page of measures.","content":{"application/json":{"schema":{"type":"object","required":["data","meta","attribution"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Measure"}},"meta":{"$ref":"#/components/schemas/Pagination"},"attribution":{"$ref":"#/components/schemas/AttributionList"}}}}}},"304":{"$ref":"#/components/responses/NotModified"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/measures/{name}":{"get":{"tags":["measures"],"operationId":"getMeasure","summary":"One measure","parameters":[{"$ref":"#/components/parameters/MeasureName"}],"responses":{"200":{"description":"The measure.","content":{"application/json":{"schema":{"type":"object","required":["data","attribution"],"properties":{"data":{"$ref":"#/components/schemas/Measure"},"attribution":{"$ref":"#/components/schemas/AttributionList"}}}}}},"304":{"$ref":"#/components/responses/NotModified"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/measures/{name}/values":{"get":{"tags":["measures"],"operationId":"listMeasureValues","summary":"A measure's value for every region of a geography","parameters":[{"$ref":"#/components/parameters/MeasureName"},{"name":"geography","in":"query","description":"The geography to list; needed (a request without it is a 400)","schema":{"$ref":"#/components/schemas/Geography"}},{"name":"state","in":"query","description":"USPS code: metros partly in it, its counties, or the state","schema":{"type":"string"}},{"$ref":"#/components/parameters/Page"},{"$ref":"#/components/parameters/PerPage"}],"responses":{"200":{"description":"A page of values.","content":{"application/json":{"schema":{"type":"object","required":["data","meta","attribution"],"properties":{"data":{"$ref":"#/components/schemas/MeasureValues"},"meta":{"$ref":"#/components/schemas/Pagination"},"attribution":{"$ref":"#/components/schemas/AttributionList"}}}}}},"304":{"$ref":"#/components/responses/NotModified"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/metros":{"get":{"tags":["metros"],"operationId":"listMetros","summary":"The metropolitan statistical areas","parameters":[{"name":"state","in":"query","description":"USPS code","schema":{"type":"string"}},{"name":"q","in":"query","description":"Text in the name","schema":{"type":"string"}},{"$ref":"#/components/parameters/Page"},{"$ref":"#/components/parameters/PerPage"}],"responses":{"200":{"description":"A page of metros.","content":{"application/json":{"schema":{"type":"object","required":["data","meta","attribution"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Metro"}},"meta":{"$ref":"#/components/schemas/Pagination"},"attribution":{"$ref":"#/components/schemas/AttributionList"}}}}}},"304":{"$ref":"#/components/responses/NotModified"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/metros/compare":{"get":{"tags":["metros"],"operationId":"compareMetros","summary":"Metros side by side","parameters":[{"name":"ids","in":"query","required":true,"description":"Up to 25 metro ids, CBSA codes or slugs, comma-separated","schema":{"type":"string"}},{"name":"measures","in":"query","description":"Up to 50 measure names, comma-separated (default: the register's standard figures)","schema":{"type":"string"}}],"responses":{"200":{"description":"The metros and their values.","content":{"application/json":{"schema":{"type":"object","required":["data","attribution"],"properties":{"data":{"type":"object","required":["measures","metros"],"properties":{"measures":{"type":"array","items":{"$ref":"#/components/schemas/MetroMeasure"}},"metros":{"type":"array","items":{"allOf":[{"$ref":"#/components/schemas/Metro"},{"type":"object","required":["values"],"properties":{"values":{"type":"object","additionalProperties":{"type":["number","null"]}}}}]}}}},"attribution":{"$ref":"#/components/schemas/AttributionList"}}}}}},"304":{"$ref":"#/components/responses/NotModified"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/metros/{ref}":{"get":{"tags":["metros"],"operationId":"getMetro","summary":"A metro's profile","description":"Every measure the API serves that the metro has a value for. `ref` is the metro's id, its five-digit CBSA code or its slug (percent-encode the slug's slashes, `us%2Ftx%2Faustin-12420`).","parameters":[{"name":"ref","in":"path","required":true,"description":"The metro's id, CBSA code or slug","schema":{"type":"string"}}],"responses":{"200":{"description":"The metro.","content":{"application/json":{"schema":{"type":"object","required":["data","attribution"],"properties":{"data":{"allOf":[{"$ref":"#/components/schemas/Metro"},{"type":"object","required":["measures"],"properties":{"measures":{"type":"array","items":{"allOf":[{"$ref":"#/components/schemas/MetroMeasure"},{"type":"object","required":["value"],"properties":{"value":{"type":"number"}}}]}}}}]},"attribution":{"$ref":"#/components/schemas/AttributionList"}}}}}},"304":{"$ref":"#/components/responses/NotModified"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/screen":{"post":{"tags":["analysis"],"operationId":"screenMetros","summary":"Screen the metros by scope and Requirements (read-only)","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScreenRequest"}}}},"responses":{"200":{"description":"The funnel and the metros that pass.","content":{"application/json":{"schema":{"type":"object","required":["data","attribution"],"properties":{"data":{"$ref":"#/components/schemas/ScreenResult"},"attribution":{"$ref":"#/components/schemas/AttributionList"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"415":{"$ref":"#/components/responses/UnsupportedMediaType"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/rank":{"post":{"tags":["analysis"],"operationId":"rankMetros","summary":"Rank the metros on weighted criteria (read-only)","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RankRequest"}}}},"responses":{"200":{"description":"The ranking.","content":{"application/json":{"schema":{"type":"object","required":["data","attribution"],"properties":{"data":{"$ref":"#/components/schemas/RankResult"},"attribution":{"$ref":"#/components/schemas/AttributionList"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"415":{"$ref":"#/components/responses/UnsupportedMediaType"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/incentive_programs":{"get":{"tags":["incentives"],"operationId":"listIncentivePrograms","summary":"Incentive programs federal, state and local governments offer (paid)","description":"Programs read from the jurisdictions' official pages and reviewed by Cadastre, each value with the\nsentence it was quoted from (`evidence`) and the page (`source_url`); a field the page does not\nstate is null (unknown). A program is what a jurisdiction offers: not an award, an amount anyone\nreceived, or a finding that a site qualifies. A jurisdiction with no programs listed is not covered\nyet. Only records from pages whose terms allow reuse are served. Part of API access: an account\nwithout it is answered 403 `api_access_required`.\n","parameters":[{"name":"state","in":"query","description":"USPS code or state FIPS: federal programs, the state's and its local governments'","schema":{"type":"string"}},{"name":"metro","in":"query","description":"CBSA code, region id or slug: federal programs, the metro's states' and its local governments'","schema":{"type":"string"}},{"name":"mechanism","in":"query","description":"Only programs of this kind","schema":{"type":"string","enum":["tax_credit","grant","loan","loan_guarantee","abatement","exemption","training_grant","infrastructure","financing_bond","zone_designation","other"]}},{"$ref":"#/components/parameters/Page"},{"name":"per_page","in":"query","description":"Items per page, up to 200 (default 50)","schema":{"type":"integer","minimum":1}}],"responses":{"200":{"description":"A page of programs.","content":{"application/json":{"schema":{"type":"object","required":["data","meta","attribution"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/IncentiveProgram"}},"meta":{"allOf":[{"$ref":"#/components/schemas/Pagination"},{"type":"object","required":["filters","note","available"],"properties":{"filters":{"type":"object"},"note":{"type":"string"},"available":{"type":"boolean","description":"Whether the catalog is approved for the API; false means no programs are served yet"}}}]},"attribution":{"$ref":"#/components/schemas/AttributionList"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"}}}}},"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"An API key (`cad_key_...`) or an OAuth access token (`cad_at_...`)."},"oauth":{"type":"oauth2","description":"Authorization code with PKCE (S256) for public clients; see /.well-known/oauth-authorization-server.","flows":{"authorizationCode":{"authorizationUrl":"/oauth/authorize","tokenUrl":"/oauth/token","refreshUrl":"/oauth/token","scopes":{"read":"Read datasets, measures and metro figures, and run screens and rankings."}}}}},"parameters":{"Page":{"name":"page","in":"query","description":"Page number, from 1","schema":{"type":"integer","minimum":1}},"PerPage":{"name":"per_page","in":"query","description":"Items per page, up to 500 (default 100)","schema":{"type":"integer","minimum":1}},"MeasureName":{"name":"name","in":"path","required":true,"description":"A measure name, as GET /measures lists them","schema":{"type":"string","pattern":"^[a-z0-9_]+$"}}},"responses":{"NotModified":{"description":"Unchanged since the ETag or date given."},"Unauthorized":{"description":"A credential that is not valid, or none where one is needed (`GET /me`).","headers":{"WWW-Authenticate":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Forbidden":{"description":"The credential is good but may not be used now: `insufficient_scope` (it lacks the scope)\nor `terms_required` (its person must accept the current Terms in a browser first).\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"NotFound":{"description":"Not found, or not served through the API.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"BadRequest":{"description":"A malformed parameter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Unprocessable":{"description":"The request is well formed but cannot be answered (an unknown measure, a Requirement whose source the API does not serve).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"UnsupportedMediaType":{"description":"The body is not application/json.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"RateLimited":{"description":"Over a rate limit: per credential, or per client address without one (or with one whose\naccount has no API access). The message says how to get higher limits.\n","headers":{"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Error":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"}}},"Geography":{"type":"string","enum":["msa","county","state"]},"Pagination":{"type":"object","required":["page","per_page","total","total_pages"],"properties":{"page":{"type":"integer"},"per_page":{"type":"integer"},"total":{"type":"integer"},"total_pages":{"type":"integer"}}},"Attribution":{"type":"object","description":"A credit to print wherever the figures are shown.","required":["dataset","publisher","credit"],"properties":{"dataset":{"type":"string"},"publisher":{"type":"string"},"credit":{"type":"string"},"url":{"type":["string","null"]},"license":{"type":["string","null"]},"license_url":{"type":["string","null"]},"notes":{"type":"array","items":{"type":"string"}},"disclaimer":{"type":"string"},"conditions":{"type":"array","items":{"type":"string"},"description":"Terms the publisher attaches to the data (CDC's conditions, the NCHS Data User Agreement)"},"share_alike":{"type":"string"},"retrieved_at":{"type":["string","null"],"format":"date-time","description":"When Cadastre last retrieved this data from the publisher (the end of its latest successful import). Cite it with the data."}}},"AttributionList":{"type":"array","items":{"$ref":"#/components/schemas/Attribution"}},"Me":{"type":"object","required":["user","account","credential","access"],"properties":{"user":{"type":"object","required":["id","name"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":["string","null"]}}},"account":{"type":"object","required":["id","name","role"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"role":{"type":"string","enum":["owner","admin","member"]}}},"credential":{"type":"object","required":["type","id","scopes"],"properties":{"type":{"type":"string","enum":["api_key","oauth"]},"id":{"type":"string","format":"uuid"},"scopes":{"type":"array","items":{"type":"string"}}}},"access":{"type":"object","description":"What the request may do: `api` (a credential of an account with API access, at its\nown limits), `public` (a credential of an account without it) or `anonymous` (no\ncredential; the MCP `whoami` tool only). `public` and `anonymous` read the same\ndatasets as `api`, at the limits of the client address.\n","required":["tier","rate_limit"],"properties":{"tier":{"type":"string","enum":["api","public","anonymous"]},"rate_limit":{"type":"object","required":["per_minute","per_day"],"properties":{"per_minute":{"type":"integer"},"per_day":{"type":"integer"}}}}}}},"Dataset":{"type":"object","required":["key","name","license","geographies","vintages","measures_count"],"properties":{"key":{"type":"string"},"name":{"type":"string"},"publisher":{"type":["string","null"]},"category":{"type":["string","null"]},"license":{"type":"string"},"license_url":{"type":["string","null"]},"url":{"type":["string","null"]},"refresh_cadence":{"type":["string","null"]},"vintages":{"type":"array","items":{"type":"integer"}},"geographies":{"type":"array","items":{"$ref":"#/components/schemas/Geography"}},"measures_count":{"type":"integer"}}},"MeasureGeography":{"type":"object","required":["source_grain","calculation","computed_by_cadastre","regions","vintages"],"properties":{"source_grain":{"type":"string","description":"The grain the values are read from: the geography itself, or county for a metro rollup"},"rollup":{"type":["string","null"]},"calculation":{"type":"string"},"computed_by_cadastre":{"type":"boolean"},"regions":{"type":"integer","description":"How many regions of the geography have a value"},"vintages":{"type":"array","items":{"type":"integer"}}}},"Measure":{"type":"object","required":["name","label","unit","dataset","geographies"],"properties":{"name":{"type":"string"},"label":{"type":"string"},"unit":{"type":"string"},"dataset":{"type":"string"},"geographies":{"type":"object","properties":{"msa":{"$ref":"#/components/schemas/MeasureGeography"},"county":{"$ref":"#/components/schemas/MeasureGeography"},"state":{"$ref":"#/components/schemas/MeasureGeography"}},"additionalProperties":false}}},"MeasureValues":{"type":"object","required":["measure","label","unit","dataset","geography","calculation","computed_by_cadastre","vintages","values"],"properties":{"measure":{"type":"string"},"label":{"type":"string"},"unit":{"type":"string"},"dataset":{"type":"string"},"geography":{"$ref":"#/components/schemas/Geography"},"calculation":{"type":"string"},"computed_by_cadastre":{"type":"boolean"},"vintages":{"type":"array","items":{"type":"integer"}},"values":{"type":"array","items":{"type":"object","required":["id","geoid","name","value"],"properties":{"id":{"type":"string","format":"uuid"},"geoid":{"type":"string"},"name":{"type":"string"},"value":{"type":"number"}}}}}},"Metro":{"type":"object","required":["id","slug","cbsa","name","states","right_to_work"],"properties":{"id":{"type":"string","format":"uuid"},"slug":{"type":"string"},"cbsa":{"type":"string","pattern":"^[0-9]{5}$"},"name":{"type":"string"},"states":{"type":"array","items":{"type":"string"}},"right_to_work":{"type":["boolean","null"],"description":"Whether every state the metro lies in is on Cadastre's list of right-to-work states"},"population":{"type":["number","null"],"description":"Present only where the population's dataset is served"}}},"MetroMeasure":{"type":"object","required":["name","label","unit","dataset","calculation","computed_by_cadastre","vintages"],"properties":{"name":{"type":"string"},"label":{"type":"string"},"unit":{"type":"string"},"dataset":{"type":"string"},"calculation":{"type":"string"},"computed_by_cadastre":{"type":"boolean"},"vintages":{"type":"array","items":{"type":"integer"}}}},"IncentiveProgram":{"type":"object","required":["id","name","aliases","jurisdiction","mechanism","eligibility_summary","benefit_summary","official_urls","source_url","evidence"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"aliases":{"type":"array","items":{"type":"string"}},"jurisdiction":{"type":"object","required":["level","key","name"],"properties":{"level":{"type":"string","enum":["federal","state","local"]},"key":{"type":"string","description":"us, a state FIPS, or a county (5) or place (7) GEOID"},"name":{"type":"string"},"state":{"type":["string","null"],"description":"USPS code"},"geoid":{"type":["string","null"]},"cbsa":{"type":["string","null"]}}},"administering_agency":{"type":["string","null"]},"mechanism":{"type":["string","null"],"description":"tax_credit, grant, loan, loan_guarantee, abatement (property tax), exemption (sales and use tax), training_grant, infrastructure, financing_bond, zone_designation or other"},"mechanism_label":{"type":["string","null"]},"discretion":{"type":["string","null"],"description":"discretionary or statutory, when the page says"},"eligibility_summary":{"type":["string","null"]},"industries":{"type":"array","items":{"type":"string"}},"naics_codes":{"type":"array","items":{"type":"string"}},"min_jobs":{"type":["integer","null"]},"min_investment_usd":{"type":["number","null"]},"wage_requirement":{"type":["string","null"]},"benefit_summary":{"type":["string","null"]},"benefit_max_usd":{"type":["number","null"]},"benefit_basis":{"type":["string","null"]},"statute":{"type":["string","null"]},"official_urls":{"type":"array","items":{"type":"string"}},"status":{"type":["string","null"],"description":"active, sunset or suspended, when the page says"},"effective_on":{"type":["string","null"],"format":"date"},"sunset_on":{"type":["string","null"],"format":"date"},"source_url":{"type":"string","description":"The official page the program was read from"},"evidence":{"type":"object","additionalProperties":{"type":"string"},"description":"Field name to the sentence on the page its value was quoted from (fields a Cadastre reviewer edited have none)"},"edited_fields":{"type":"array","items":{"type":"string"},"description":"Fields whose value a Cadastre reviewer set or corrected"},"agency_from_source_list":{"type":"boolean","description":"The agency is the page's publisher from Cadastre's source list, not a sentence on the page"},"last_verified_at":{"type":["string","null"],"format":"date-time"},"verified_by":{"type":["string","null"],"description":"human (approved by Cadastre) or agent (re-read unchanged since)"}}},"Requirements":{"type":"object","description":"The project page's Requirements.","additionalProperties":false,"properties":{"tier":{"type":"string","enum":["1m","500k","250k"],"description":"Minimum population"},"min_mfg_share":{"type":"number","description":"Manufacturing share of GDP, percent, at least"},"max_unemployment":{"type":"number","description":"Unemployment rate, percent, at most"},"min_growth":{"type":"number","description":"Five-year population growth, percent, at least"},"max_hazard":{"type":"number","description":"FEMA National Risk Index, at most"},"max_elec_price":{"type":"number","description":"Industrial electricity price, cents per kWh, at most"},"rtw_only":{"type":"boolean","description":"Only metros entirely in right-to-work states"}}},"Scope":{"type":"object","additionalProperties":false,"properties":{"states":{"type":"array","items":{"type":"string"},"description":"USPS codes; a metro partly in one is in scope"}}},"ScreenRequest":{"type":"object","additionalProperties":false,"properties":{"scope":{"$ref":"#/components/schemas/Scope"},"requirements":{"$ref":"#/components/schemas/Requirements"}}},"FunnelStage":{"type":"object","required":["label","count"],"properties":{"label":{"type":"string"},"count":{"type":"integer"}}},"ScreenResult":{"type":"object","required":["scope","requirements","gates","funnel","count","metros"],"properties":{"scope":{"$ref":"#/components/schemas/Scope"},"requirements":{"$ref":"#/components/schemas/Requirements"},"gates":{"type":"array","items":{"type":"object","required":["key","label","measure"],"properties":{"key":{"type":"string"},"label":{"type":"string"},"measure":{"type":["string","null"]}}}},"funnel":{"type":"array","items":{"$ref":"#/components/schemas/FunnelStage"}},"count":{"type":"integer"},"metros":{"type":"array","items":{"allOf":[{"$ref":"#/components/schemas/Metro"},{"type":"object","required":["values"],"properties":{"values":{"type":"object","additionalProperties":{"type":["number","null"]}}}}]}}}},"Criterion":{"type":"object","required":["measure","direction"],"additionalProperties":false,"properties":{"measure":{"type":"string","description":"A measure name from GET /measures"},"direction":{"type":"string","enum":["higher_better","lower_better"],"description":"Which way scores better"},"weight":{"type":"number","minimum":0,"description":"Default 1; 0 keeps the criterion as a gate only"},"cutoff":{"type":"object","description":"Eliminates the metros it holds for.","required":["comparator","value"],"additionalProperties":false,"properties":{"comparator":{"type":"string","enum":["lt","lte","gt","gte"]},"value":{"type":"number"}}}}},"RankRequest":{"type":"object","additionalProperties":false,"properties":{"scope":{"$ref":"#/components/schemas/Scope"},"requirements":{"$ref":"#/components/schemas/Requirements"},"criteria":{"type":"array","maxItems":20,"items":{"$ref":"#/components/schemas/Criterion"}},"include_eliminated":{"type":"boolean"}}},"RankResult":{"type":"object","required":["method","scored","scope","requirements","funnel","criteria","count","metros"],"properties":{"method":{"type":"string"},"scored":{"type":"boolean"},"scope":{"$ref":"#/components/schemas/Scope"},"requirements":{"$ref":"#/components/schemas/Requirements"},"funnel":{"type":"array","items":{"$ref":"#/components/schemas/FunnelStage"}},"criteria":{"type":"array","items":{"type":"object","required":["measure","label","direction","weight","scoring"],"properties":{"measure":{"type":"string"},"label":{"type":"string"},"direction":{"type":"string"},"weight":{"type":"number"},"cutoff":{"type":["object","null"],"properties":{"comparator":{"type":"string"},"value":{"type":"number"}}},"scoring":{"type":"boolean"},"observed":{"type":["integer","null"]}}}},"count":{"type":"integer"},"metros":{"type":"array","items":{"allOf":[{"$ref":"#/components/schemas/Metro"},{"type":"object","required":["rank","composite","eliminated","reasons","criteria"],"properties":{"rank":{"type":["integer","null"]},"composite":{"type":["number","null"]},"eliminated":{"type":"boolean"},"reasons":{"type":"array","items":{"type":"string"}},"criteria":{"type":"array","items":{"type":"object","required":["measure","value","score","contribution"],"properties":{"measure":{"type":"string"},"value":{"type":["number","null"]},"score":{"type":["number","null"]},"contribution":{"type":["number","null"]}}}}}}]}}}}}}}