{"components":{"headers":{"ApiVersion":{"description":"Semantic version of the current HTTP contract.","schema":{"example":"1.4.0","type":"string"}},"DatasetRevision":{"description":"Deterministic identity binding the API-contract and revision-schema versions, effective live-city corpus, durable overrides, freshness-state digest, enrichment implementation, and licensed scope/exclusion policy.","schema":{"pattern":"^gm1-[a-f0-9]{64}$","type":"string"}},"Deprecation":{"description":"RFC 9745 deprecation signal when an operation is retired.","schema":{"type":"string"}},"EntityTag":{"description":"Strong validator for GET /api/sample, /api/dataset/schema, /api/dataset/export-schema, and /openapi.json. Licensed responses remain private/no-store and omit ETag.","schema":{"type":"string"}},"RateLimitLimit":{"description":"Maximum requests in the active limit window.","schema":{"minimum":0,"type":"integer"}},"RateLimitRemaining":{"description":"Requests remaining in the active limit window.","schema":{"minimum":0,"type":"integer"}},"RateLimitReset":{"description":"UTC epoch seconds when the active limit window resets.","schema":{"minimum":0,"type":"integer"}},"ReplacementLink":{"description":"Link header pointing to the replacement contract.","schema":{"type":"string"}},"RequestId":{"description":"Caller-supplied safe X-Request-ID echoed back, or a server-generated opaque request identifier.","schema":{"maxLength":80,"minLength":8,"type":"string"}},"RetryAfter":{"description":"Seconds to wait before retrying.","schema":{"minimum":1,"type":"integer"}},"Sunset":{"description":"RFC 8594 retirement date for a deprecated operation.","schema":{"format":"http-date","type":"string"}}},"schemas":{"ApiError":{"additionalProperties":true,"description":"Stable JSON error envelope.","properties":{"allowedCitySlugs":{"items":{"type":"string"},"maxItems":5,"type":"array"},"code":{"type":"string"},"error":{"type":"string"},"note":{"type":"string"}},"required":["error"],"type":"object"},"ChangeEvent":{"additionalProperties":false,"properties":{"city":{"type":"string"},"detectedAt":{"format":"date-time","type":"string"},"fromAmount":{"type":["number","null"]},"fromStatus":{"type":["string","null"]},"id":{"description":"Durable event identifier.","minimum":1,"type":"integer"},"programId":{"type":"string"},"programName":{"type":["string","null"]},"toAmount":{"type":["number","null"]},"toStatus":{"type":["string","null"]},"type":{"type":"string"}},"required":["id","detectedAt","city","programId","programName","type","fromStatus","toStatus"],"type":"object"},"ChangeFeed":{"additionalProperties":false,"properties":{"changes":{"items":{"additionalProperties":false,"properties":{"city":{"type":"string"},"detectedAt":{"format":"date-time","type":"string"},"fromAmount":{"type":["number","null"]},"fromStatus":{"type":["string","null"]},"id":{"description":"Durable event identifier.","minimum":1,"type":"integer"},"programId":{"type":"string"},"programName":{"type":["string","null"]},"toAmount":{"type":["number","null"]},"toStatus":{"type":["string","null"]},"type":{"type":"string"}},"required":["id","detectedAt","city","programId","programName","type","fromStatus","toStatus"],"type":"object"},"type":"array"},"count":{"minimum":0,"type":"integer"},"datasetRevision":{"pattern":"^gm1-[a-f0-9]{64}$","type":"string"},"hasMore":{"type":"boolean"},"nextCursor":{"type":["string","null"]},"note":{"type":["string","null"]},"scopeNote":{"type":"string"},"since":{"format":"date","type":["string","null"]},"snapshotMaxId":{"minimum":0,"type":"integer"},"windowStart":{"format":"date-time","type":"string"}},"required":["changes","count","datasetRevision","since","windowStart","snapshotMaxId","hasMore","nextCursor","scopeNote","note"],"type":"object"},"City":{"additionalProperties":false,"properties":{"description":{"type":"string"},"lastUpdated":{"format":"date","type":"string"},"lat":{"maximum":90,"minimum":-90,"type":"number"},"lng":{"maximum":180,"minimum":-180,"type":"number"},"medianHomeValue":{"minimum":0,"type":"integer"},"name":{"type":"string"},"population":{"minimum":0,"type":"integer"},"preWarHousingPct":{"maximum":100,"minimum":0,"type":"integer"},"slug":{"type":"string"},"state":{"type":"string"},"stateAbbr":{"maxLength":2,"minLength":2,"type":"string"},"status":{"enum":["live"],"type":"string"}},"required":["slug","name","state","stateAbbr","status"],"type":"object"},"CityCounts":{"additionalProperties":false,"properties":{"cities":{"items":{"$ref":"#/components/schemas/CityWithCount"},"type":"array"},"count":{"minimum":0,"type":"integer"},"datasetRevision":{"pattern":"^gm1-[a-f0-9]{64}$","type":"string"},"totalPrograms":{"minimum":0,"type":"integer"}},"required":["cities","count","datasetRevision","totalPrograms"],"type":"object"},"CityList":{"additionalProperties":false,"properties":{"cities":{"items":{"$ref":"#/components/schemas/City"},"type":"array"},"count":{"minimum":0,"type":"integer"},"datasetRevision":{"pattern":"^gm1-[a-f0-9]{64}$","type":"string"}},"required":["cities","count","datasetRevision"],"type":"object"},"CityWithCount":{"additionalProperties":false,"properties":{"description":{"type":"string"},"lastUpdated":{"format":"date","type":"string"},"lat":{"maximum":90,"minimum":-90,"type":"number"},"lng":{"maximum":180,"minimum":-180,"type":"number"},"medianHomeValue":{"minimum":0,"type":"integer"},"name":{"type":"string"},"population":{"minimum":0,"type":"integer"},"preWarHousingPct":{"maximum":100,"minimum":0,"type":"integer"},"programCount":{"minimum":0,"type":"integer"},"slug":{"type":"string"},"state":{"type":"string"},"stateAbbr":{"maxLength":2,"minLength":2,"type":"string"},"status":{"enum":["live"],"type":"string"}},"required":["slug","name","state","stateAbbr","status","programCount"],"type":"object"},"DatasetHealth":{"additionalProperties":false,"description":"Live-city corpus, licensed-scope, link-health, source-review, fact-audit, and paid-readiness metrics.","properties":{"citiesCovered":{"minimum":0,"type":"integer"},"dataset":{"type":"string"},"datasetRevision":{"pattern":"^gm1-[a-f0-9]{64}$","type":"string"},"distinctPrograms":{"minimum":0,"type":"integer"},"factAccuracy":{"type":["object","null"]},"lastLinkCheck":{"format":"date","type":["string","null"]},"licensedDistinctPrograms":{"minimum":0,"type":"integer"},"licensedLinkHealth":{"$ref":"#/components/schemas/LinkHealthCounts"},"licensedLocallyUniquePrograms":{"minimum":0,"type":"integer"},"licensedPrograms":{"minimum":0,"type":"integer"},"licensedSourceClassCounts":{"additionalProperties":{"minimum":0,"type":"integer"},"type":"object"},"licensedSourceDomainCounts":{"additionalProperties":{"minimum":1,"type":"integer"},"description":"Exact normalized source-host row counts in the current licensed scope; rights review is required per host.","type":"object"},"linkHealth":{"$ref":"#/components/schemas/LinkHealthCounts"},"locallyUniquePrograms":{"minimum":0,"type":"integer"},"maintainedFederalCanonicalRows":{"minimum":0,"type":"integer"},"nationalLayerRows":{"minimum":0,"type":"integer"},"notes":{"additionalProperties":{"type":"string"},"type":"object"},"outOfScopePrograms":{"minimum":0,"type":"integer"},"paidLicensing":{"$ref":"#/components/schemas/DatasetReadiness"},"quarantinedPrograms":{"minimum":0,"type":"integer"},"selectedNationalRows":{"minimum":0,"type":"integer"},"sourceVerification":{"type":"object"},"totalPrograms":{"minimum":0,"type":"integer"}},"required":["dataset","datasetRevision","totalPrograms","licensedPrograms","quarantinedPrograms","outOfScopePrograms","citiesCovered","linkHealth","licensedLinkHealth","sourceVerification","factAccuracy","paidLicensing","notes"],"type":"object"},"DatasetReadiness":{"additionalProperties":false,"properties":{"buyerNotice":{"type":"string"},"checkedAt":{"format":"date-time","type":"string"},"checkoutEnabled":{"type":"boolean"},"code":{"enum":["READY","DATASET_CHECKOUT_NOT_READY"],"type":"string"},"commercialRelease":{"type":"object"},"dataHealth":{"type":"object"},"infrastructure":{"additionalProperties":false,"properties":{"rateLimitStorageScheme":{"type":"string"},"sharedRateLimitStorage":{"type":"boolean"},"trustedOriginProxyConfigured":{"type":"boolean"}},"required":["sharedRateLimitStorage","rateLimitStorageScheme","trustedOriginProxyConfigured"],"type":"object"},"readinessDigest":{"type":"string"},"reasons":{"items":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"},"type":"array"},"strictAudit":{"type":"object"},"thresholds":{"type":"object"}},"required":["checkoutEnabled","code","checkedAt","readinessDigest","strictAudit","dataHealth","commercialRelease","infrastructure","thresholds","reasons","buyerNotice"],"type":"object"},"ExportProgram":{"$id":"https://www.thegrantmap.com/api/dataset/export-schema","$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"category":{"type":"string"},"city":{"description":"Licensed live-city slug for this exported row.","type":"string"},"contractor":{"additionalProperties":false,"description":"Serve-time contractor + money-mechanics classification inferred from the program text. Booleans are MEASURED signals: True means the program text states it; False means our text does not state it (the official page may still require it), not a confirmed negative.","properties":{"contractorRequired":{"description":"Text says the work must use a licensed/approved contractor.","type":"boolean"},"disbursement":{"description":"How the money reaches the work; 'unknown' when our text has no signal (~27%).","enum":["reimbursement","forgivable-loan","voucher","point-of-sale","tax-benefit","rebate","matching","deferred","direct-pay","lien","grant","loan","unknown"],"type":"string"},"fundsContractorWork":{"description":"Funds work a contractor performs (~92% of the corpus).","type":"boolean"},"hasCashGap":{"description":"Homeowner fronts the cost and is reimbursed after the work (the deepest affordability friction).","type":"boolean"},"repayment":{"enum":["forgivable","rebate","loan","grant"],"type":"string"},"requirement":{"description":"How strongly the program needs a licensed contractor at apply time.","enum":["required","likely","none"],"type":"string"},"requiresBidToApply":{"description":"Text explicitly requires a contractor bid/estimate to apply (strict; per-program).","type":"boolean"}},"required":["requirement","disbursement"],"type":"object"},"deadline":{"type":["string","null"]},"deadline_es":{"type":["string","null"]},"description":{"type":"string"},"description_es":{"type":"string"},"eligibilityType":{"description":"e.g. homeowner, renter, business","items":{"type":"string"},"type":"array"},"freshness":{"additionalProperties":false,"description":"Serve-time provenance attached by The Grant Map.","properties":{"confidence":{"description":"source-verified = the cited page was fetched and a review found support for this program AND its stated dollar amount, with the evidence excerpt stored and a literal current maxAmount match (scoped to those facts); federal-canonical = one of four normalized maintained federal record; model-identity-reviewed = a dated, model-assisted page review judged identity a match but stores no verbatim identity proof and did not verify the stored amount; link-verified = a live URL classified as program-specific; link-resolves-unverified = the URL works but is a generic agency landing page that does not itself confirm this program or amount; unverified = link dead/bot-blocked/unchecked.","enum":["source-verified","federal-canonical","model-identity-reviewed","link-verified","link-resolves-unverified","unverified"],"type":"string"},"lastChecked":{"format":"date","type":["string","null"]},"linkStatus":{"enum":["live","dead","bot-blocked","unchecked"],"type":"string"},"sourceAmountVerified":{"description":"True only when identity was reviewed and a contextual verbatim page quote binds the current positive maxAmount to a benefit ceiling for the same fingerprinted URL/name/source/amount fact.","type":"boolean"},"sourceEvidence":{"description":"Short evidence excerpt from the cited page confirming the program/amount (present only when sourceAmountVerified is true).","type":["string","null"]},"sourceProgramVerified":{"description":"Legacy field: true when a model-assisted review judged program identity a match. It does not provide verbatim identity evidence or validate the amount.","type":"boolean"},"sourceQuoteVerified":{"description":"True only when the contextual amount excerpt was mechanically found in fetched page text.","type":"boolean"},"sourceReviewStale":{"description":"True when the last valid review is at least 90 days old. Stale reviews cannot earn a current source-verified or model-identity-reviewed confidence tier.","type":"boolean"},"sourceReviewed":{"description":"True when a dated source review ran.","type":"boolean"},"sourceVerified":{"description":"Compatibility alias for sourceAmountVerified; never true for identity-only review.","type":"boolean"},"sourceVerifiedAmount":{"description":"The amount the cited page actually stated (present only when sourceAmountVerified is true).","type":["string","null"]},"sourceVerifiedAt":{"description":"Date the source check ran.","format":"date","type":["string","null"]}},"required":["linkStatus","confidence"],"type":"object"},"fundingStatus":{"description":"Stored published-status label; unknown means the current cycle must be confirmed with the administrator. Any label can lag, so confirm it before use.","enum":["available","waitlist","closed","unknown"],"type":"string"},"id":{"description":"Stable program identifier within its city","type":"string"},"incomeRequirement":{"description":"Stored income field. Some rows use canonical values such as verylow, low, moderate, or any; others preserve source-specific free text. The value any is a sentinel, not proof that no income test applies.","type":"string"},"matchRate":{"type":["number","string","null"]},"maxAmount":{"type":["number","null"]},"maxAmountLabel":{"type":"string"},"maxAmountLabel_es":{"type":"string"},"name":{"description":"Program name (English; names are not translated)","type":"string"},"phone":{"type":["string","null"]},"projectTypes":{"items":{"type":"string"},"type":"array"},"source":{"description":"Administering agency","type":"string"},"specialPopulations":{"description":"e.g. seniors, veterans, disabled","items":{"type":"string"},"type":"array"},"url":{"description":"Cited URL when one is on file; may be a program page, application route, or general agency page. Surface it with a verification warning.","format":"uri","type":["string","null"]}},"required":["city","id","name","source","eligibilityType","fundingStatus","url"],"title":"Grant Map Flat Export Program Record","type":"object"},"JsonSchemaDocument":{"additionalProperties":true,"properties":{"$id":{"format":"uri","type":"string"},"$schema":{"format":"uri","type":"string"},"additionalProperties":{"type":"boolean"},"properties":{"type":"object"},"required":{"items":{"type":"string"},"type":"array"},"title":{"type":"string"},"type":{"enum":["object"],"type":"string"}},"required":["$schema","$id","title","type","properties","required"],"type":"object"},"LinkHealthCounts":{"additionalProperties":false,"properties":{"bot-blocked":{"minimum":0,"type":"integer"},"dead":{"minimum":0,"type":"integer"},"live":{"minimum":0,"type":"integer"},"unchecked":{"minimum":0,"type":"integer"}},"required":["live","dead","bot-blocked","unchecked"],"type":"object"},"Program":{"$id":"https://www.thegrantmap.com/api/dataset/schema","$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"category":{"type":"string"},"contractor":{"additionalProperties":false,"description":"Serve-time contractor + money-mechanics classification inferred from the program text. Booleans are MEASURED signals: True means the program text states it; False means our text does not state it (the official page may still require it), not a confirmed negative.","properties":{"contractorRequired":{"description":"Text says the work must use a licensed/approved contractor.","type":"boolean"},"disbursement":{"description":"How the money reaches the work; 'unknown' when our text has no signal (~27%).","enum":["reimbursement","forgivable-loan","voucher","point-of-sale","tax-benefit","rebate","matching","deferred","direct-pay","lien","grant","loan","unknown"],"type":"string"},"fundsContractorWork":{"description":"Funds work a contractor performs (~92% of the corpus).","type":"boolean"},"hasCashGap":{"description":"Homeowner fronts the cost and is reimbursed after the work (the deepest affordability friction).","type":"boolean"},"repayment":{"enum":["forgivable","rebate","loan","grant"],"type":"string"},"requirement":{"description":"How strongly the program needs a licensed contractor at apply time.","enum":["required","likely","none"],"type":"string"},"requiresBidToApply":{"description":"Text explicitly requires a contractor bid/estimate to apply (strict; per-program).","type":"boolean"}},"required":["requirement","disbursement"],"type":"object"},"deadline":{"type":["string","null"]},"deadline_es":{"type":["string","null"]},"description":{"type":"string"},"description_es":{"type":"string"},"eligibilityType":{"description":"e.g. homeowner, renter, business","items":{"type":"string"},"type":"array"},"freshness":{"additionalProperties":false,"description":"Serve-time provenance attached by The Grant Map.","properties":{"confidence":{"description":"source-verified = the cited page was fetched and a review found support for this program AND its stated dollar amount, with the evidence excerpt stored and a literal current maxAmount match (scoped to those facts); federal-canonical = one of four normalized maintained federal record; model-identity-reviewed = a dated, model-assisted page review judged identity a match but stores no verbatim identity proof and did not verify the stored amount; link-verified = a live URL classified as program-specific; link-resolves-unverified = the URL works but is a generic agency landing page that does not itself confirm this program or amount; unverified = link dead/bot-blocked/unchecked.","enum":["source-verified","federal-canonical","model-identity-reviewed","link-verified","link-resolves-unverified","unverified"],"type":"string"},"lastChecked":{"format":"date","type":["string","null"]},"linkStatus":{"enum":["live","dead","bot-blocked","unchecked"],"type":"string"},"sourceAmountVerified":{"description":"True only when identity was reviewed and a contextual verbatim page quote binds the current positive maxAmount to a benefit ceiling for the same fingerprinted URL/name/source/amount fact.","type":"boolean"},"sourceEvidence":{"description":"Short evidence excerpt from the cited page confirming the program/amount (present only when sourceAmountVerified is true).","type":["string","null"]},"sourceProgramVerified":{"description":"Legacy field: true when a model-assisted review judged program identity a match. It does not provide verbatim identity evidence or validate the amount.","type":"boolean"},"sourceQuoteVerified":{"description":"True only when the contextual amount excerpt was mechanically found in fetched page text.","type":"boolean"},"sourceReviewStale":{"description":"True when the last valid review is at least 90 days old. Stale reviews cannot earn a current source-verified or model-identity-reviewed confidence tier.","type":"boolean"},"sourceReviewed":{"description":"True when a dated source review ran.","type":"boolean"},"sourceVerified":{"description":"Compatibility alias for sourceAmountVerified; never true for identity-only review.","type":"boolean"},"sourceVerifiedAmount":{"description":"The amount the cited page actually stated (present only when sourceAmountVerified is true).","type":["string","null"]},"sourceVerifiedAt":{"description":"Date the source check ran.","format":"date","type":["string","null"]}},"required":["linkStatus","confidence"],"type":"object"},"fundingStatus":{"description":"Stored published-status label; unknown means the current cycle must be confirmed with the administrator. Any label can lag, so confirm it before use.","enum":["available","waitlist","closed","unknown"],"type":"string"},"id":{"description":"Stable program identifier within its city","type":"string"},"incomeRequirement":{"description":"Stored income field. Some rows use canonical values such as verylow, low, moderate, or any; others preserve source-specific free text. The value any is a sentinel, not proof that no income test applies.","type":"string"},"matchRate":{"type":["number","string","null"]},"maxAmount":{"type":["number","null"]},"maxAmountLabel":{"type":"string"},"maxAmountLabel_es":{"type":"string"},"name":{"description":"Program name (English; names are not translated)","type":"string"},"phone":{"type":["string","null"]},"projectTypes":{"items":{"type":"string"},"type":"array"},"source":{"description":"Administering agency","type":"string"},"specialPopulations":{"description":"e.g. seniors, veterans, disabled","items":{"type":"string"},"type":"array"},"url":{"description":"Cited URL when one is on file; may be a program page, application route, or general agency page. Surface it with a verification warning.","format":"uri","type":["string","null"]}},"required":["id","name","source","eligibilityType","fundingStatus","url"],"title":"Grant Map Program Record","type":"object"},"ReproducibilityArtifact":{"additionalProperties":true,"description":"Versioned report/audit artifact. Each route publishes its own frozen manifest and record fields.","type":"object"},"TrialScopeError":{"additionalProperties":false,"properties":{"allowedCitySlugs":{"items":{"type":"string"},"maxItems":5,"type":"array"},"code":{"enum":["API_TRIAL_POLICY_INVALID","API_TRIAL_CITY_REQUIRED","API_TRIAL_CITY_FORBIDDEN"],"type":"string"},"error":{"type":"string"}},"required":["error","code"],"type":"object"}},"securitySchemes":{"ApiKeyAuth":{"in":"header","name":"X-Api-Key","type":"apiKey"}}},"externalDocs":{"description":"Quickstart, trial scope, errors, and freshness semantics","url":"https://www.thegrantmap.com/developers/api"},"info":{"contact":{"email":"support@thegrantmap.com","name":"The Grant Map Team","url":"https://www.thegrantmap.com/data"},"description":"Structured home improvement grant, rebate, and forgivable-loan programs across US cities, bilingual (EN/ES), with per-record link-health provenance. Program responses exclude adjacent non-home-repair records and known-problem quarantined records. All supplied program filters combine with logical AND. Authenticate with the X-Api-Key header. Trial keys expire within 30 days and are limited to 1-5 approved city slugs; paid tiers retain licensed live-city scope. Trial change-feed requests must name an approved city. The current unprefixed routes are the 1.x contract; a breaking change requires a new major path. License at https://www.thegrantmap.com/data.","license":{"name":"The Grant Map Dataset License","url":"https://www.thegrantmap.com/terms"},"title":"The Grant Map Dataset API","version":"1.4.0"},"openapi":"3.1.0","paths":{"/api/changes":{"get":{"parameters":[{"in":"query","name":"since","schema":{"format":"date","type":"string"}},{"in":"query","name":"city","schema":{"type":"string"}},{"in":"query","name":"limit","schema":{"maximum":1000,"minimum":1,"type":"integer"}},{"description":"Opaque nextCursor from the previous response. Keep the same since and city parameters on every page.","in":"query","name":"cursor","schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"changes":{"items":{"additionalProperties":false,"properties":{"city":{"type":"string"},"detectedAt":{"format":"date-time","type":"string"},"fromAmount":{"type":["number","null"]},"fromStatus":{"type":["string","null"]},"id":{"description":"Durable event identifier.","minimum":1,"type":"integer"},"programId":{"type":"string"},"programName":{"type":["string","null"]},"toAmount":{"type":["number","null"]},"toStatus":{"type":["string","null"]},"type":{"type":"string"}},"required":["id","detectedAt","city","programId","programName","type","fromStatus","toStatus"],"type":"object"},"type":"array"},"count":{"minimum":0,"type":"integer"},"datasetRevision":{"pattern":"^gm1-[a-f0-9]{64}$","type":"string"},"hasMore":{"type":"boolean"},"nextCursor":{"type":["string","null"]},"note":{"type":["string","null"]},"scopeNote":{"type":"string"},"since":{"format":"date","type":["string","null"]},"snapshotMaxId":{"minimum":0,"type":"integer"},"windowStart":{"format":"date-time","type":"string"}},"required":["changes","count","datasetRevision","since","windowStart","snapshotMaxId","hasMore","nextCursor","scopeNote","note"],"type":"object"}}},"description":"OK","headers":{"X-API-Version":{"$ref":"#/components/headers/ApiVersion"},"X-Dataset-Revision":{"$ref":"#/components/headers/DatasetRevision"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Request-ID":{"$ref":"#/components/headers/RequestId"}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Invalid/missing date, city slug, row limit, or cursor","headers":{"X-API-Version":{"$ref":"#/components/headers/ApiVersion"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Request-ID":{"$ref":"#/components/headers/RequestId"}}},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"API key is missing or invalid","headers":{"X-API-Version":{"$ref":"#/components/headers/ApiVersion"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Request-ID":{"$ref":"#/components/headers/RequestId"}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/ApiError"},{"$ref":"#/components/schemas/TrialScopeError"}]}}},"description":"Key is revoked/expired or the trial city is outside its scope","headers":{"X-API-Version":{"$ref":"#/components/headers/ApiVersion"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Request-ID":{"$ref":"#/components/headers/RequestId"}}},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Request or authentication limit exceeded","headers":{"Retry-After":{"$ref":"#/components/headers/RetryAfter"},"X-API-Version":{"$ref":"#/components/headers/ApiVersion"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Request-ID":{"$ref":"#/components/headers/RequestId"}}},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Authentication, throttle, or change-feed storage unavailable","headers":{"Retry-After":{"$ref":"#/components/headers/RetryAfter"},"X-API-Version":{"$ref":"#/components/headers/ApiVersion"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Request-ID":{"$ref":"#/components/headers/RequestId"}}}},"summary":"Change events detected by weekly verification"}},"/api/cities":{"get":{"parameters":[{"in":"query","name":"status","schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CityList"}}},"description":"OK","headers":{"X-API-Version":{"$ref":"#/components/headers/ApiVersion"},"X-Dataset-Revision":{"$ref":"#/components/headers/DatasetRevision"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Request-ID":{"$ref":"#/components/headers/RequestId"}}},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"API key is missing or invalid","headers":{"X-API-Version":{"$ref":"#/components/headers/ApiVersion"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Request-ID":{"$ref":"#/components/headers/RequestId"}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/ApiError"},{"$ref":"#/components/schemas/TrialScopeError"}]}}},"description":"Key is revoked/expired or the trial city is outside its scope","headers":{"X-API-Version":{"$ref":"#/components/headers/ApiVersion"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Request-ID":{"$ref":"#/components/headers/RequestId"}}},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Request or authentication limit exceeded","headers":{"Retry-After":{"$ref":"#/components/headers/RetryAfter"},"X-API-Version":{"$ref":"#/components/headers/ApiVersion"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Request-ID":{"$ref":"#/components/headers/RequestId"}}},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Authentication or throttle storage unavailable","headers":{"Retry-After":{"$ref":"#/components/headers/RetryAfter"},"X-API-Version":{"$ref":"#/components/headers/ApiVersion"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Request-ID":{"$ref":"#/components/headers/RequestId"}}}},"summary":"Licensed live cities (approved subset for trial keys)"}},"/api/cities/counts":{"get":{"parameters":[{"description":"Exact registry status; licensed scope is live-only.","in":"query","name":"status","schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CityCounts"}}},"description":"OK","headers":{"X-API-Version":{"$ref":"#/components/headers/ApiVersion"},"X-Dataset-Revision":{"$ref":"#/components/headers/DatasetRevision"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Request-ID":{"$ref":"#/components/headers/RequestId"}}},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"API key is missing or invalid","headers":{"X-API-Version":{"$ref":"#/components/headers/ApiVersion"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Request-ID":{"$ref":"#/components/headers/RequestId"}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/ApiError"},{"$ref":"#/components/schemas/TrialScopeError"}]}}},"description":"Key is revoked/expired or the trial city is outside its scope","headers":{"X-API-Version":{"$ref":"#/components/headers/ApiVersion"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Request-ID":{"$ref":"#/components/headers/RequestId"}}},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Request or authentication limit exceeded","headers":{"Retry-After":{"$ref":"#/components/headers/RetryAfter"},"X-API-Version":{"$ref":"#/components/headers/ApiVersion"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Request-ID":{"$ref":"#/components/headers/RequestId"}}},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Authentication or throttle storage unavailable","headers":{"Retry-After":{"$ref":"#/components/headers/RetryAfter"},"X-API-Version":{"$ref":"#/components/headers/ApiVersion"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Request-ID":{"$ref":"#/components/headers/RequestId"}}}},"summary":"Licensed cities and counts (approved subset for trials)"}},"/api/data/readiness":{"get":{"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DatasetReadiness"}}},"description":"OK","headers":{"X-API-Version":{"$ref":"#/components/headers/ApiVersion"},"X-Dataset-Revision":{"$ref":"#/components/headers/DatasetRevision"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Request-ID":{"$ref":"#/components/headers/RequestId"}}},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Request limit exceeded","headers":{"Retry-After":{"$ref":"#/components/headers/RetryAfter"},"X-API-Version":{"$ref":"#/components/headers/ApiVersion"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Request-ID":{"$ref":"#/components/headers/RequestId"}}}},"security":[],"summary":"Paid-license strict-audit and health gate (public)"}},"/api/dataset/export-schema":{"get":{"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonSchemaDocument"}}},"description":"OK","headers":{"ETag":{"$ref":"#/components/headers/EntityTag"},"X-API-Version":{"$ref":"#/components/headers/ApiVersion"},"X-Dataset-Revision":{"$ref":"#/components/headers/DatasetRevision"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Request-ID":{"$ref":"#/components/headers/RequestId"}}},"304":{"description":"Not modified for the supplied If-None-Match value","headers":{"ETag":{"$ref":"#/components/headers/EntityTag"},"X-API-Version":{"$ref":"#/components/headers/ApiVersion"},"X-Dataset-Revision":{"$ref":"#/components/headers/DatasetRevision"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Request-ID":{"$ref":"#/components/headers/RequestId"}}},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Request limit exceeded","headers":{"Retry-After":{"$ref":"#/components/headers/RetryAfter"},"X-API-Version":{"$ref":"#/components/headers/ApiVersion"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Request-ID":{"$ref":"#/components/headers/RequestId"}}}},"security":[],"summary":"Allowlisted flat-export row JSON Schema (public)"}},"/api/dataset/health":{"get":{"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DatasetHealth"}}},"description":"OK","headers":{"X-API-Version":{"$ref":"#/components/headers/ApiVersion"},"X-Dataset-Revision":{"$ref":"#/components/headers/DatasetRevision"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Request-ID":{"$ref":"#/components/headers/RequestId"}}},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Request limit exceeded","headers":{"Retry-After":{"$ref":"#/components/headers/RetryAfter"},"X-API-Version":{"$ref":"#/components/headers/ApiVersion"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Request-ID":{"$ref":"#/components/headers/RequestId"}}}},"security":[],"summary":"Coverage + link-health stats (public, no key)"}},"/api/dataset/reports/fact-audit-latest":{"get":{"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReproducibilityArtifact"}}},"description":"OK","headers":{"X-API-Version":{"$ref":"#/components/headers/ApiVersion"},"X-Dataset-Revision":{"$ref":"#/components/headers/DatasetRevision"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Request-ID":{"$ref":"#/components/headers/RequestId"}}},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Request limit exceeded","headers":{"Retry-After":{"$ref":"#/components/headers/RetryAfter"},"X-API-Version":{"$ref":"#/components/headers/ApiVersion"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Request-ID":{"$ref":"#/components/headers/RequestId"}}},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Strict audit not yet available","headers":{"X-API-Version":{"$ref":"#/components/headers/ApiVersion"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Request-ID":{"$ref":"#/components/headers/RequestId"}}}},"security":[],"summary":"Latest completed strict fact-audit reproducibility artifact"}},"/api/dataset/reports/fact-audit-legacy-2026-06-17":{"get":{"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReproducibilityArtifact"}}},"description":"OK","headers":{"X-API-Version":{"$ref":"#/components/headers/ApiVersion"},"X-Dataset-Revision":{"$ref":"#/components/headers/DatasetRevision"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Request-ID":{"$ref":"#/components/headers/RequestId"}}},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Request limit exceeded","headers":{"Retry-After":{"$ref":"#/components/headers/RetryAfter"},"X-API-Version":{"$ref":"#/components/headers/ApiVersion"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Request-ID":{"$ref":"#/components/headers/RequestId"}}},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Artifact unavailable","headers":{"X-API-Version":{"$ref":"#/components/headers/ApiVersion"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Request-ID":{"$ref":"#/components/headers/RequestId"}}}},"security":[],"summary":"Superseded June 2026 fact-audit reproducibility artifact"}},"/api/dataset/reports/state-home-improvement-2026":{"get":{"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReproducibilityArtifact"}}},"description":"OK","headers":{"X-API-Version":{"$ref":"#/components/headers/ApiVersion"},"X-Dataset-Revision":{"$ref":"#/components/headers/DatasetRevision"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Request-ID":{"$ref":"#/components/headers/RequestId"}}},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Request limit exceeded","headers":{"Retry-After":{"$ref":"#/components/headers/RetryAfter"},"X-API-Version":{"$ref":"#/components/headers/ApiVersion"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Request-ID":{"$ref":"#/components/headers/RequestId"}}},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Artifact unavailable","headers":{"X-API-Version":{"$ref":"#/components/headers/ApiVersion"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Request-ID":{"$ref":"#/components/headers/RequestId"}}}},"security":[],"summary":"Frozen 2026 state-report derivation artifact (public)"}},"/api/dataset/schema":{"get":{"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonSchemaDocument"}}},"description":"OK","headers":{"ETag":{"$ref":"#/components/headers/EntityTag"},"X-API-Version":{"$ref":"#/components/headers/ApiVersion"},"X-Dataset-Revision":{"$ref":"#/components/headers/DatasetRevision"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Request-ID":{"$ref":"#/components/headers/RequestId"}}},"304":{"description":"Not modified for the supplied If-None-Match value","headers":{"ETag":{"$ref":"#/components/headers/EntityTag"},"X-API-Version":{"$ref":"#/components/headers/ApiVersion"},"X-Dataset-Revision":{"$ref":"#/components/headers/DatasetRevision"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Request-ID":{"$ref":"#/components/headers/RequestId"}}},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Request limit exceeded","headers":{"Retry-After":{"$ref":"#/components/headers/RetryAfter"},"X-API-Version":{"$ref":"#/components/headers/ApiVersion"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Request-ID":{"$ref":"#/components/headers/RequestId"}}}},"security":[],"summary":"Allowlisted program-record JSON Schema (public)"}},"/api/programs":{"get":{"description":"Every supplied filter combines with logical AND.","parameters":[{"description":"Exact member of eligibilityType.","in":"query","name":"type","schema":{"type":"string"}},{"description":"Income-tier hierarchy match. 'any' is a stored sentinel, not proof that no administrator income test applies.","in":"query","name":"income","schema":{"type":"string"}},{"description":"Project type match, including documented aliases.","in":"query","name":"project","schema":{"type":"string"}},{"description":"Special-population match. Records with no stored population restriction also match; records restricted to another group do not.","in":"query","name":"special","schema":{"type":"string"}},{"description":"Exact stored category.","in":"query","name":"category","schema":{"type":"string"}},{"description":"Exact stored fundingStatus.","in":"query","name":"status","schema":{"enum":["available","waitlist","closed","unknown"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"city":{"type":"string"},"count":{"type":"integer"},"datasetRevision":{"pattern":"^gm1-[a-f0-9]{64}$","type":"string"},"docs":{"format":"uri","type":"string"},"excludedBySafetyPolicy":{"minimum":0,"type":"integer"},"exclusionPolicyVersion":{"minimum":1,"type":"integer"},"openapi":{"format":"uri","type":"string"},"programs":{"items":{"$ref":"#/components/schemas/Program"},"type":"array"},"sample":{"type":"boolean"},"scope":{"type":"string"},"version":{"type":["string","null"]}},"required":["city","count","datasetRevision","excludedBySafetyPolicy","exclusionPolicyVersion","programs"],"type":"object"}}},"description":"OK","headers":{"X-API-Version":{"$ref":"#/components/headers/ApiVersion"},"X-Dataset-Revision":{"$ref":"#/components/headers/DatasetRevision"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Request-ID":{"$ref":"#/components/headers/RequestId"}}},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"API key is missing or invalid","headers":{"X-API-Version":{"$ref":"#/components/headers/ApiVersion"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Request-ID":{"$ref":"#/components/headers/RequestId"}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/ApiError"},{"$ref":"#/components/schemas/TrialScopeError"}]}}},"description":"Key is revoked/expired or the trial city is outside its scope","headers":{"X-API-Version":{"$ref":"#/components/headers/ApiVersion"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Request-ID":{"$ref":"#/components/headers/RequestId"}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Default licensed city unavailable","headers":{"X-API-Version":{"$ref":"#/components/headers/ApiVersion"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Request-ID":{"$ref":"#/components/headers/RequestId"}}},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Request or authentication limit exceeded","headers":{"Retry-After":{"$ref":"#/components/headers/RetryAfter"},"X-API-Version":{"$ref":"#/components/headers/ApiVersion"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Request-ID":{"$ref":"#/components/headers/RequestId"}}},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Authentication or throttle storage unavailable","headers":{"Retry-After":{"$ref":"#/components/headers/RetryAfter"},"X-API-Version":{"$ref":"#/components/headers/ApiVersion"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Request-ID":{"$ref":"#/components/headers/RequestId"}}}},"summary":"Des Moines home-repair records (legacy default city)"}},"/api/programs/national":{"get":{"description":"Every supplied filter combines with logical AND.","parameters":[{"description":"Exact member of eligibilityType.","in":"query","name":"type","schema":{"type":"string"}},{"description":"Income-tier hierarchy match. 'any' is a stored sentinel, not proof that no administrator income test applies.","in":"query","name":"income","schema":{"type":"string"}},{"description":"Project type match, including documented aliases.","in":"query","name":"project","schema":{"type":"string"}},{"description":"Special-population match. Records with no stored population restriction also match; records restricted to another group do not.","in":"query","name":"special","schema":{"type":"string"}},{"description":"Exact stored category.","in":"query","name":"category","schema":{"type":"string"}},{"description":"Exact stored fundingStatus.","in":"query","name":"status","schema":{"enum":["available","waitlist","closed","unknown"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"city":{"type":"string"},"count":{"type":"integer"},"datasetRevision":{"pattern":"^gm1-[a-f0-9]{64}$","type":"string"},"docs":{"format":"uri","type":"string"},"excludedBySafetyPolicy":{"minimum":0,"type":"integer"},"exclusionPolicyVersion":{"minimum":1,"type":"integer"},"openapi":{"format":"uri","type":"string"},"programs":{"items":{"$ref":"#/components/schemas/Program"},"type":"array"},"sample":{"type":"boolean"},"scope":{"type":"string"},"version":{"type":["string","null"]}},"required":["city","count","datasetRevision","excludedBySafetyPolicy","exclusionPolicyVersion","programs"],"type":"object"}}},"description":"OK","headers":{"X-API-Version":{"$ref":"#/components/headers/ApiVersion"},"X-Dataset-Revision":{"$ref":"#/components/headers/DatasetRevision"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Request-ID":{"$ref":"#/components/headers/RequestId"}}},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"API key is missing or invalid","headers":{"X-API-Version":{"$ref":"#/components/headers/ApiVersion"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Request-ID":{"$ref":"#/components/headers/RequestId"}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/ApiError"},{"$ref":"#/components/schemas/TrialScopeError"}]}}},"description":"Key is revoked/expired or the trial city is outside its scope","headers":{"X-API-Version":{"$ref":"#/components/headers/ApiVersion"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Request-ID":{"$ref":"#/components/headers/RequestId"}}},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Request or authentication limit exceeded","headers":{"Retry-After":{"$ref":"#/components/headers/RetryAfter"},"X-API-Version":{"$ref":"#/components/headers/ApiVersion"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Request-ID":{"$ref":"#/components/headers/RequestId"}}},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Authentication or throttle storage unavailable","headers":{"Retry-After":{"$ref":"#/components/headers/RetryAfter"},"X-API-Version":{"$ref":"#/components/headers/ApiVersion"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Request-ID":{"$ref":"#/components/headers/RequestId"}}}},"summary":"Four maintained federal records (paid tiers only)"}},"/api/programs/{city}":{"get":{"description":"Every supplied filter combines with logical AND.","parameters":[{"in":"path","name":"city","required":true,"schema":{"type":"string"}},{"description":"Exact member of eligibilityType.","in":"query","name":"type","schema":{"type":"string"}},{"description":"Income-tier hierarchy match. 'any' is a stored sentinel, not proof that no administrator income test applies.","in":"query","name":"income","schema":{"type":"string"}},{"description":"Project type match, including documented aliases.","in":"query","name":"project","schema":{"type":"string"}},{"description":"Special-population match. Records with no stored population restriction also match; records restricted to another group do not.","in":"query","name":"special","schema":{"type":"string"}},{"description":"Exact stored category.","in":"query","name":"category","schema":{"type":"string"}},{"description":"Exact stored fundingStatus.","in":"query","name":"status","schema":{"enum":["available","waitlist","closed","unknown"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"city":{"type":"string"},"count":{"type":"integer"},"datasetRevision":{"pattern":"^gm1-[a-f0-9]{64}$","type":"string"},"docs":{"format":"uri","type":"string"},"excludedBySafetyPolicy":{"minimum":0,"type":"integer"},"exclusionPolicyVersion":{"minimum":1,"type":"integer"},"openapi":{"format":"uri","type":"string"},"programs":{"items":{"$ref":"#/components/schemas/Program"},"type":"array"},"sample":{"type":"boolean"},"scope":{"type":"string"},"version":{"type":["string","null"]}},"required":["city","count","datasetRevision","excludedBySafetyPolicy","exclusionPolicyVersion","programs"],"type":"object"}}},"description":"OK","headers":{"X-API-Version":{"$ref":"#/components/headers/ApiVersion"},"X-Dataset-Revision":{"$ref":"#/components/headers/DatasetRevision"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Request-ID":{"$ref":"#/components/headers/RequestId"}}},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"API key is missing or invalid","headers":{"X-API-Version":{"$ref":"#/components/headers/ApiVersion"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Request-ID":{"$ref":"#/components/headers/RequestId"}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/ApiError"},{"$ref":"#/components/schemas/TrialScopeError"}]}}},"description":"Key is revoked/expired or the trial city is outside its scope","headers":{"X-API-Version":{"$ref":"#/components/headers/ApiVersion"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Request-ID":{"$ref":"#/components/headers/RequestId"}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Licensed city not found","headers":{"X-API-Version":{"$ref":"#/components/headers/ApiVersion"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Request-ID":{"$ref":"#/components/headers/RequestId"}}},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Request or authentication limit exceeded","headers":{"Retry-After":{"$ref":"#/components/headers/RetryAfter"},"X-API-Version":{"$ref":"#/components/headers/ApiVersion"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Request-ID":{"$ref":"#/components/headers/RequestId"}}},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Authentication or throttle storage unavailable","headers":{"Retry-After":{"$ref":"#/components/headers/RetryAfter"},"X-API-Version":{"$ref":"#/components/headers/ApiVersion"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Request-ID":{"$ref":"#/components/headers/RequestId"}}}},"summary":"Home-repair records after the quarantine"}},"/api/programs/{city}/{programId}":{"get":{"parameters":[{"in":"path","name":"city","required":true,"schema":{"type":"string"}},{"in":"path","name":"programId","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Program"}}},"description":"OK","headers":{"X-API-Version":{"$ref":"#/components/headers/ApiVersion"},"X-Dataset-Revision":{"$ref":"#/components/headers/DatasetRevision"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Request-ID":{"$ref":"#/components/headers/RequestId"}}},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"API key is missing or invalid","headers":{"X-API-Version":{"$ref":"#/components/headers/ApiVersion"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Request-ID":{"$ref":"#/components/headers/RequestId"}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/ApiError"},{"$ref":"#/components/schemas/TrialScopeError"}]}}},"description":"Key is revoked/expired or the trial city is outside its scope","headers":{"X-API-Version":{"$ref":"#/components/headers/ApiVersion"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Request-ID":{"$ref":"#/components/headers/RequestId"}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Licensed city or program not found","headers":{"X-API-Version":{"$ref":"#/components/headers/ApiVersion"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Request-ID":{"$ref":"#/components/headers/RequestId"}}},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Request or authentication limit exceeded","headers":{"Retry-After":{"$ref":"#/components/headers/RetryAfter"},"X-API-Version":{"$ref":"#/components/headers/ApiVersion"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Request-ID":{"$ref":"#/components/headers/RequestId"}}},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Authentication or throttle storage unavailable","headers":{"Retry-After":{"$ref":"#/components/headers/RetryAfter"},"X-API-Version":{"$ref":"#/components/headers/ApiVersion"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Request-ID":{"$ref":"#/components/headers/RequestId"}}}},"summary":"One non-quarantined live-city program, full detail"}},"/api/sample":{"get":{"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"city":{"type":"string"},"count":{"type":"integer"},"datasetRevision":{"pattern":"^gm1-[a-f0-9]{64}$","type":"string"},"docs":{"format":"uri","type":"string"},"excludedBySafetyPolicy":{"minimum":0,"type":"integer"},"exclusionPolicyVersion":{"minimum":1,"type":"integer"},"openapi":{"format":"uri","type":"string"},"programs":{"items":{"$ref":"#/components/schemas/Program"},"type":"array"},"sample":{"type":"boolean"},"scope":{"type":"string"},"version":{"type":["string","null"]}},"required":["city","count","datasetRevision","excludedBySafetyPolicy","exclusionPolicyVersion","programs"],"type":"object"}}},"description":"OK","headers":{"ETag":{"$ref":"#/components/headers/EntityTag"},"X-API-Version":{"$ref":"#/components/headers/ApiVersion"},"X-Dataset-Revision":{"$ref":"#/components/headers/DatasetRevision"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Request-ID":{"$ref":"#/components/headers/RequestId"}}},"304":{"description":"Not modified for the supplied If-None-Match value","headers":{"ETag":{"$ref":"#/components/headers/EntityTag"},"X-API-Version":{"$ref":"#/components/headers/ApiVersion"},"X-Dataset-Revision":{"$ref":"#/components/headers/DatasetRevision"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Request-ID":{"$ref":"#/components/headers/RequestId"}}},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Request limit exceeded","headers":{"Retry-After":{"$ref":"#/components/headers/RetryAfter"},"X-API-Version":{"$ref":"#/components/headers/ApiVersion"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Request-ID":{"$ref":"#/components/headers/RequestId"}}},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Sample unavailable","headers":{"X-API-Version":{"$ref":"#/components/headers/ApiVersion"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Request-ID":{"$ref":"#/components/headers/RequestId"}}}},"security":[],"summary":"Des Moines evaluation collection after licensed scope and export quarantine (no key required)"}},"/openapi.json":{"get":{"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object"}}},"description":"OK","headers":{"ETag":{"$ref":"#/components/headers/EntityTag"},"X-API-Version":{"$ref":"#/components/headers/ApiVersion"},"X-Dataset-Revision":{"$ref":"#/components/headers/DatasetRevision"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Request-ID":{"$ref":"#/components/headers/RequestId"}}},"304":{"description":"Not modified for the supplied If-None-Match value","headers":{"ETag":{"$ref":"#/components/headers/EntityTag"},"X-API-Version":{"$ref":"#/components/headers/ApiVersion"},"X-Dataset-Revision":{"$ref":"#/components/headers/DatasetRevision"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Request-ID":{"$ref":"#/components/headers/RequestId"}}},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Request limit exceeded","headers":{"Retry-After":{"$ref":"#/components/headers/RetryAfter"},"X-API-Version":{"$ref":"#/components/headers/ApiVersion"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Request-ID":{"$ref":"#/components/headers/RequestId"}}}},"security":[],"summary":"OpenAPI 3.1 contract document (public)"}}},"security":[{"ApiKeyAuth":[]}],"servers":[{"url":"https://www.thegrantmap.com"}],"x-version-policy":{"breakingChangePathTemplate":"/api/v{major}","currentDeprecatedOperations":[],"currentMajor":1,"deprecationHeaders":["Deprecation","Sunset","Link"],"minimumDeprecationNoticeDays":90}}
