{"openapi":"3.1.0","jsonSchemaDialect":"https://json-schema.org/draft/2020-12/schema","info":{"title":"TennessAI public research API","version":"1.0.0","description":"Read-only, source-linked Tennessee AI and data-center research. Source publication, desk review and research-edition dates have different meanings. This contract describes public data reads only; private subscriber records and editorial operations are not exposed.","termsOfService":"https://tennessai.com/terms"},"servers":[{"url":"https://tennessai.com"}],"paths":{"/api/v1/projects":{"get":{"summary":"List reviewed Tennessee infrastructure records","description":"Selected campus and multi-site program records, not a statewide census. Investment, power, status and unknown values are qualified disclosure strings. Programs and campus amounts must not be aggregated. The total is the matching record count before applying limit; this endpoint has no offset parameter.","parameters":[{"name":"limit","in":"query","required":false,"description":"Maximum records returned (1–100).","schema":{"type":"integer","minimum":1,"maximum":100,"default":100}},{"name":"region","in":"query","required":false,"description":"Exact region slug, for example northern-tennessee. An unmatched region returns an empty data array.","schema":{"type":"string"}}],"responses":{"200":{"description":"Matching records with their named sources.","content":{"application/json":{"schema":{"type":"object","required":["data","total","sources"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Project"}},"total":{"type":"integer","minimum":0},"sources":{"type":"array","items":{"$ref":"#/components/schemas/Source"}}}}}}},"400":{"description":"Invalid request or temporarily unavailable research records.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Invalid request or temporarily unavailable research records.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/diligence/{slug}/packet.json":{"get":{"summary":"Download a public Tennessee diligence packet","description":"One exact reviewed campus or program, its primary sources, qualified disclosures and open research questions. Reference portals are not project-specific approvals.","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-z0-9-]{1,120}$"}}],"responses":{"200":{"description":"Public research packet attachment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResearchPacket"}}}},"404":{"description":"Invalid request or temporarily unavailable research records.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Invalid request or temporarily unavailable research records.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/share/{slug}/copy.txt":{"get":{"summary":"Download an attributed Tennessee record excerpt","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-z0-9-]{1,120}$"}}],"responses":{"200":{"description":"Plain-text attachment preserving disclosure scope, canonical URL, source trail and reuse qualifications.","content":{"text/plain":{"schema":{"type":"string"}}}},"404":{"description":"Unknown or invalid record slug.","content":{"text/plain":{"schema":{"type":"string"}}}},"503":{"description":"Public research export temporarily unavailable.","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/api/v1/projects/{slug}":{"get":{"summary":"Read one Tennessee infrastructure record","parameters":[{"name":"slug","in":"path","required":true,"description":"Canonical project slug from the project list.","schema":{"type":"string","pattern":"^[a-z0-9-]{1,120}$"}}],"responses":{"200":{"description":"One reviewed project and its named sources.","content":{"application/json":{"schema":{"type":"object","required":["data","sources"],"properties":{"data":{"$ref":"#/components/schemas/Project"},"sources":{"type":"array","items":{"$ref":"#/components/schemas/Source"}}}}}}},"404":{"description":"Unknown or invalid project slug.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Invalid request or temporarily unavailable research records.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/projects.csv":{"get":{"summary":"Download the Tennessee infrastructure register as CSV","description":"Full selected register with formula-injection-safe disclosure text, confidence, review date and source identifiers. Unknown values remain text, not zero. The final columns recordUrl and sourceUrls resolve each row to its Tennessee record and named primary-source URLs; sourceIds remain preserved. Source IDs also resolve through /api/v1/sources.","responses":{"200":{"description":"CSV attachment named tennessai-projects.csv.","content":{"text/csv":{"schema":{"type":"string"}}}},"503":{"description":"Invalid request or temporarily unavailable research records.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/sources":{"get":{"summary":"Page through the named primary-source register","parameters":[{"name":"limit","in":"query","required":false,"description":"Maximum records returned (1–100).","schema":{"type":"integer","minimum":1,"maximum":100,"default":100}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"maximum":9007199254740991,"default":0}}],"responses":{"200":{"description":"A bounded source page. Follow nextOffset until null. Ordering follows the reviewed source register.","content":{"application/json":{"schema":{"type":"object","required":["data","total","limit","offset","nextOffset"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Source"}},"total":{"type":"integer","minimum":0},"limit":{"type":"integer","minimum":1,"maximum":100},"offset":{"type":"integer","minimum":0},"nextOffset":{"type":["integer","null"],"minimum":0}}}}}},"400":{"description":"Invalid request or temporarily unavailable research records.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Invalid request or temporarily unavailable research records.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/datasets/infrastructure/json":{"get":{"summary":"Compatibility alias for the project JSON endpoint","description":"Selected campus and multi-site program records, not a statewide census. Investment, power, status and unknown values are qualified disclosure strings. Programs and campus amounts must not be aggregated. The total is the matching record count before applying limit; this endpoint has no offset parameter.","parameters":[{"name":"limit","in":"query","required":false,"description":"Maximum records returned (1–100).","schema":{"type":"integer","minimum":1,"maximum":100,"default":100}},{"name":"region","in":"query","required":false,"description":"Exact region slug, for example northern-tennessee. An unmatched region returns an empty data array.","schema":{"type":"string"}}],"responses":{"200":{"description":"Matching records with their named sources.","content":{"application/json":{"schema":{"type":"object","required":["data","total","sources"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Project"}},"total":{"type":"integer","minimum":0},"sources":{"type":"array","items":{"$ref":"#/components/schemas/Source"}}}}}}},"400":{"description":"Invalid request or temporarily unavailable research records.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Invalid request or temporarily unavailable research records.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/datasets/infrastructure/csv":{"get":{"summary":"Compatibility alias for the infrastructure CSV export","description":"Full selected register with formula-injection-safe disclosure text, confidence, review date and source identifiers. Unknown values remain text, not zero. The final columns recordUrl and sourceUrls resolve each row to its Tennessee record and named primary-source URLs; sourceIds remain preserved. Source IDs also resolve through /api/v1/sources.","responses":{"200":{"description":"CSV attachment named tennessai-projects.csv.","content":{"text/csv":{"schema":{"type":"string"}}}},"503":{"description":"Invalid request or temporarily unavailable research records.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"components":{"schemas":{"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string"}}},"ResearchPacket":{"type":"object","required":["schemaVersion","canonicalUrl","packetUrl","reviewDate","project","sources","qualifications","openQuestions"],"properties":{"schemaVersion":{"const":"1.0"},"canonicalUrl":{"type":"string","format":"uri"},"packetUrl":{"type":"string","format":"uri"},"reviewDate":{"type":"string","format":"date"},"project":{"$ref":"#/components/schemas/Project"},"sources":{"type":"array","items":{"$ref":"#/components/schemas/Source"}},"qualifications":{"type":"array","items":{"type":"string"}},"openQuestions":{"type":"array","items":{"type":"object","required":["topic","question","boundary","references"],"properties":{"topic":{"type":"string"},"question":{"type":"string"},"boundary":{"type":"string"},"references":{"type":"array","items":{"$ref":"#/components/schemas/Source"}}}}}}},"Source":{"type":"object","required":["id","title","url","publisher","verifiedAt","accessedAt"],"properties":{"id":{"type":"string"},"title":{"type":"string"},"url":{"type":"string","format":"uri"},"publisher":{"type":"string"},"verifiedAt":{"type":"string","format":"date","description":"Desk review date, not a source publication or project milestone."},"accessedAt":{"type":"string","format":"date"},"publishedAt":{"type":"string","format":"date","description":"Original source publication date where recorded; absent means it is not recorded."}}},"Project":{"type":"object","required":["slug","name","operator","location","locality","region","kind","status","confidence","summary","details","sourceIds","capex","power","jobs","verifiedAt"],"properties":{"slug":{"type":"string"},"name":{"type":"string"},"operator":{"type":"string"},"location":{"type":"string"},"locality":{"type":"string","description":"Source-attributed locality label. A postal area or approximate marker does not verify parcel jurisdiction."},"region":{"type":"string"},"kind":{"type":"string","enum":["campus","program"]},"status":{"type":"string","description":"Source-attributed stage, including unresolved delivery status."},"confidence":{"type":"string","enum":["A","B","C"],"description":"Evidence support, not a prediction or investment recommendation."},"summary":{"type":"string"},"details":{"type":"array","items":{"type":"string"}},"sourceIds":{"type":"array","items":{"type":"string"}},"capex":{"type":"string","description":"Qualified investment disclosure text; not a numeric aggregate."},"power":{"type":"string","description":"Qualified power disclosure text. Marketed IT load and delivered utility capacity are different measures."},"jobs":{"type":"string","description":"Qualified employment disclosure text; not a live vacancy count."},"verifiedAt":{"type":"string","format":"date"},"lat":{"type":"number","minimum":-90,"maximum":90},"lng":{"type":"number","minimum":-180,"maximum":180},"approximateLocation":{"type":"boolean"},"locationNote":{"type":"string"}}}}}}