Every API here is available over the APIs.io API and to AI agents over MCP.
openapi: 3.2.0
info:
title: Project Tycho API
version: '1.0'
description: >-
Project Tycho is an open-access repository for global health surveillance data, built and
operated at the University of Pittsburgh and served from www.tycho.pitt.edu (136.142.8.172,
inside Pitt's own 136.142.0.0/16). The API is a single-host, query-parameter-driven read
surface: every endpoint is a GET under /api/, every response is CSV, and every call carries a
free API key in the `apikey` query parameter. Thirteen of the fourteen operations are variable
listings that enumerate the controlled values of one field of the Project Tycho Pre-compiled
Data Format version 1.0 (condition, country, admin1, admin2, city, pathogen, age range,
subpopulation, fatalities, cumulative, diagnosis certainty, place of acquisition, source name);
the fourteenth, /query, returns the surveillance rows themselves, filtered on any variable in
that format. The site is developed and maintained for Project Tycho by the MIDAS Coordination
Center under NIH/NIGMS grant R24GM153920 and is copyright University of Pittsburgh.
Pitt publishes no OpenAPI, JSON Schema or other machine-readable contract for this API; this
document was written by API Evangelist from the published API reference and from live probes.
termsOfService: https://www.tycho.pitt.edu/dataset/api/
contact:
name: Project Tycho — University of Pittsburgh
email: tycho@phdl.pitt.edu
url: https://www.tycho.pitt.edu/about/
license:
name: Open access — see Project Tycho data use terms
url: https://www.tycho.pitt.edu/about/
x-operator: institution
x-operator-evidence: >-
servers[] www.tycho.pitt.edu is a host under the University of Pittsburgh's own registrable
domain, pitt.edu, and resolves to 136.142.8.172 — inside Pitt's own 136.142.0.0/16 address
space, not a vendor's. The site footer reads "© 2026 University of Pittsburgh"; the published
contact address is tycho@phdl.pitt.edu (Public Health Dynamics Laboratory, Pitt School of
Public Health); and the API reference at https://www.tycho.pitt.edu/dataset/api/ is served
from the same host. No vendor host, vendor contact, vendor terms or shared-platform
fingerprint appears anywhere on the surface, and no other institution in the university cohort
ships this contract. Probed 2026-08-30 — every path under /api/ answers HTTP 200.
x-provenance:
generated: '2026-08-30'
method: derived
source: >-
Derived from the published API reference at https://www.tycho.pitt.edu/dataset/api/ (fetched
2026-08-30, HTTP 200, 31,978 bytes), which names every path, its returned variables, its
filter parameters and its paging parameters, reconciled against live keyless probes of all
fourteen documented paths on 2026-08-30.
authorship: >-
Written by API Evangelist, not published by the University of Pittsburgh. No machine-readable
contract for this API was found — https://www.tycho.pitt.edu/api/openapi.json,
/api/openapi.yaml and /api/swagger.json are not published, and the university operates no
developer portal (developer.pitt.edu and apis.pitt.edu do not resolve).
coverage: >-
All fourteen paths named in the published reference are modelled. Response bodies are CSV and
could not be captured without a key, so response schemas describe the documented column sets
rather than observed payloads, and are marked as such per operation. The full set of
filterable variables on /query is the Project Tycho Pre-compiled Data Format v1.0 variable
list; the documented subset is enumerated here and the remainder is described but not
enumerated rather than guessed.
limitation: >-
Path existence could NOT be confirmed by probe. The API evaluates the key before it routes:
https://www.tycho.pitt.edu/api/nonsensepath?apikey=INVALIDKEY returns exactly the same
HTTP 200 "Invalid API key" body as every documented path. The path list here therefore rests
on the published documentation alone.
servers:
- url: https://www.tycho.pitt.edu/api
description: Production — Project Tycho API, operated by the University of Pittsburgh
security:
- ProjectTychoApiKey: []
tags:
- name: variables
description: >-
Listings of the controlled values available for each variable of the Project Tycho Pre-compiled
Data Format version 1.0, except PeriodStartDate and PeriodEndDate.
- name: data
description: Filtered retrieval of Project Tycho surveillance rows.
paths:
/condition:
get:
tags: [variables]
operationId: listConditions
summary: List conditions
description: >-
Returns the full listing of available condition information as CSV with the columns
ConditionName and ConditionSNOMED. Both columns are also available as case-sensitive
equality filters.
parameters:
- $ref: '#/components/parameters/ApiKey'
- name: ConditionName
in: query
required: false
description: Case-sensitive exact match on ConditionName, e.g. `Measles`.
schema: { type: string }
- name: ConditionSNOMED
in: query
required: false
description: Case-sensitive exact match on the SNOMED CT concept id for the condition.
schema: { type: string }
responses:
'200':
$ref: '#/components/responses/ConditionCsv'
/country:
get:
tags: [variables]
operationId: listCountries
summary: List countries
description: Returns CountryISO and CountryName for every country present in the repository.
parameters:
- $ref: '#/components/parameters/ApiKey'
- name: CountryISO
in: query
required: false
description: Case-sensitive exact match on the ISO 3166-1 alpha-2 country code, e.g. `US`.
schema: { type: string }
- name: CountryName
in: query
required: false
description: Case-sensitive exact match on the country name, e.g. `UNITED STATES OF AMERICA`.
schema: { type: string }
responses:
'200':
$ref: '#/components/responses/CountryCsv'
/admin1:
get:
tags: [variables]
operationId: listAdmin1
summary: List first-level administrative divisions
description: >-
Returns CountryISO, CountryName, Admin1ISO and Admin1Name. Any of the four returned
variables may be used as a case-sensitive equality filter.
parameters:
- $ref: '#/components/parameters/ApiKey'
- $ref: '#/components/parameters/CountryISO'
- $ref: '#/components/parameters/CountryName'
- $ref: '#/components/parameters/Admin1ISO'
- $ref: '#/components/parameters/Admin1Name'
responses:
'200':
$ref: '#/components/responses/Admin1Csv'
/admin2:
get:
tags: [variables]
operationId: listAdmin2
summary: List second-level administrative divisions
description: >-
Returns CountryISO, CountryName, Admin1ISO, Admin1Name and Admin2Name. Any of the five
returned variables may be used as a case-sensitive equality filter.
parameters:
- $ref: '#/components/parameters/ApiKey'
- $ref: '#/components/parameters/CountryISO'
- $ref: '#/components/parameters/CountryName'
- $ref: '#/components/parameters/Admin1ISO'
- $ref: '#/components/parameters/Admin1Name'
- $ref: '#/components/parameters/Admin2Name'
responses:
'200':
$ref: '#/components/responses/Admin2Csv'
/city:
get:
tags: [variables]
operationId: listCities
summary: List cities
description: >-
Returns CountryISO, CountryName, Admin1ISO, Admin1Name, Admin2Name and CityName. Any of the
six returned variables may be used as a case-sensitive equality filter.
parameters:
- $ref: '#/components/parameters/ApiKey'
- $ref: '#/components/parameters/CountryISO'
- $ref: '#/components/parameters/CountryName'
- $ref: '#/components/parameters/Admin1ISO'
- $ref: '#/components/parameters/Admin1Name'
- $ref: '#/components/parameters/Admin2Name'
- $ref: '#/components/parameters/CityName'
responses:
'200':
$ref: '#/components/responses/CityCsv'
/pathogen:
get:
tags: [variables]
operationId: listPathogens
summary: List pathogens
description: >-
Returns PathogenName and PathogenTaxonID (NCBI Taxonomy identifier). Both may be used as
case-sensitive equality filters.
parameters:
- $ref: '#/components/parameters/ApiKey'
- name: PathogenName
in: query
required: false
description: Case-sensitive exact match on the pathogen's scientific name.
schema: { type: string }
- name: PathogenTaxonID
in: query
required: false
description: Case-sensitive exact match on the NCBI Taxonomy identifier.
schema: { type: string }
responses:
'200':
$ref: '#/components/responses/PathogenCsv'
/agerange:
get:
tags: [variables]
operationId: listAgeRanges
summary: List age ranges
description: Returns the AgeRange column. The published reference states that no filters are available.
parameters:
- $ref: '#/components/parameters/ApiKey'
responses:
'200':
$ref: '#/components/responses/SingleColumnCsv'
/subpopulation:
get:
tags: [variables]
operationId: listSubpopulations
summary: List subpopulations
description: Returns the Subpopulation column. The published reference states that no filters are available.
parameters:
- $ref: '#/components/parameters/ApiKey'
responses:
'200':
$ref: '#/components/responses/SingleColumnCsv'
/fatalities:
get:
tags: [variables]
operationId: listFatalities
summary: List fatality flag values
description: Returns the Fatalities column. The published reference states that no filters are available.
parameters:
- $ref: '#/components/parameters/ApiKey'
responses:
'200':
$ref: '#/components/responses/SingleColumnCsv'
/cumulative:
get:
tags: [variables]
operationId: listCumulative
summary: List cumulative-series flag values
description: >-
Returns the PartOfCumulativeCountSeries column. The published reference states that no
filters are available.
parameters:
- $ref: '#/components/parameters/ApiKey'
responses:
'200':
$ref: '#/components/responses/SingleColumnCsv'
/diagnosiscertainty:
get:
tags: [variables]
operationId: listDiagnosisCertainty
summary: List diagnosis-certainty values
description: Returns the DiagnosisCertainty column. The published reference states that no filters are available.
parameters:
- $ref: '#/components/parameters/ApiKey'
responses:
'200':
$ref: '#/components/responses/SingleColumnCsv'
/placeofacquisition:
get:
tags: [variables]
operationId: listPlaceOfAcquisition
summary: List place-of-acquisition values
description: >-
Returns the PlaceOfAcqusition column. The column name is misspelled in Project Tycho's own
published reference and in the data format; it is reproduced here verbatim rather than
corrected, because a client must send and read what the API actually uses.
parameters:
- $ref: '#/components/parameters/ApiKey'
responses:
'200':
$ref: '#/components/responses/SingleColumnCsv'
/sourcename:
get:
tags: [variables]
operationId: listSourceNames
summary: List source names
description: Returns the SourceName column. The published reference states that no filters are available.
parameters:
- $ref: '#/components/parameters/ApiKey'
responses:
'200':
$ref: '#/components/responses/SingleColumnCsv'
/query:
get:
tags: [data]
operationId: querySurveillanceData
summary: Query surveillance data
description: >-
Returns a filtered subset of Project Tycho surveillance rows in the Project Tycho
Pre-compiled Data Format version 1.0, as CSV. Every call MUST specify both a condition and
a location. The condition is given as one of ConditionName or ConditionSNOMED; the location
is given as at least one of CountryISO, CountryName, Admin1ISO, Admin1Name, Admin2Name or
CityName. Any remaining variable in the data format may be added as an optional filter.
Date ranges use PeriodStartDate and PeriodEndDate with the operators =, >= and <=, and dates
must be formatted YYYY-MM-DD. Variable names are case-sensitive and must match the case used
in the data format column headings.
parameters:
- $ref: '#/components/parameters/ApiKey'
- name: ConditionName
in: query
required: false
description: >-
Required unless ConditionSNOMED is supplied. Case-sensitive exact match, e.g. `Measles`.
schema: { type: string }
- name: ConditionSNOMED
in: query
required: false
description: Required unless ConditionName is supplied. SNOMED CT concept id for the condition.
schema: { type: string }
- $ref: '#/components/parameters/CountryISO'
- $ref: '#/components/parameters/CountryName'
- $ref: '#/components/parameters/Admin1ISO'
- $ref: '#/components/parameters/Admin1Name'
- $ref: '#/components/parameters/Admin2Name'
- $ref: '#/components/parameters/CityName'
- name: PeriodStartDate
in: query
required: false
description: >-
Reporting-period start, YYYY-MM-DD. The documented operators are `=`, `>=` and `<=`; the
operator is written into the query string itself (PeriodStartDate>=2000-01-01) rather than
passed as a separate parameter.
schema: { type: string, format: date }
- name: PeriodEndDate
in: query
required: false
description: Reporting-period end, YYYY-MM-DD. Same operator convention as PeriodStartDate.
schema: { type: string, format: date }
- name: Fatalities
in: query
required: false
description: Restrict to fatality (1) or non-fatality (0) counts.
schema: { type: string, enum: ['0', '1'] }
- name: PartOfCumulativeCountSeries
in: query
required: false
description: Restrict to rows that are (1) or are not (0) part of a cumulative count series.
schema: { type: string, enum: ['0', '1'] }
- name: SourceName
in: query
required: false
description: Restrict to rows attributed to one reporting source.
schema: { type: string }
- name: limit
in: query
required: false
description: Rows of results to retrieve. Default 5000, maximum 20000.
schema: { type: integer, default: 5000, maximum: 20000, minimum: 1 }
- name: offset
in: query
required: false
description: >-
Row offset for paging. With limit=5000, offset=5000 returns results starting at row 5001.
An offset past the end of the result set returns the literal text "No results".
schema: { type: integer, minimum: 0 }
responses:
'200':
$ref: '#/components/responses/TychoDataCsv'
components:
securitySchemes:
ProjectTychoApiKey:
type: apiKey
in: query
name: apikey
description: >-
A free API key, obtained from the Profile page after registering an account at
https://www.tycho.pitt.edu. The key travels in the query string on every request, which
means it is written into server access logs, browser history, referrer headers and any
intermediary cache. Project Tycho offers no header-based alternative.
parameters:
ApiKey:
name: apikey
in: query
required: true
description: Project Tycho API key. Required on every request; evaluated before routing.
schema: { type: string }
CountryISO:
name: CountryISO
in: query
required: false
description: Case-sensitive exact match on ISO 3166-1 alpha-2 country code, e.g. `US`.
schema: { type: string }
CountryName:
name: CountryName
in: query
required: false
description: Case-sensitive exact match on country name, e.g. `UNITED STATES OF AMERICA`.
schema: { type: string }
Admin1ISO:
name: Admin1ISO
in: query
required: false
description: Case-sensitive exact match on ISO 3166-2 subdivision code, e.g. `US-PA`.
schema: { type: string }
Admin1Name:
name: Admin1Name
in: query
required: false
description: Case-sensitive exact match on first-level division name, e.g. `Pennsylvania`.
schema: { type: string }
Admin2Name:
name: Admin2Name
in: query
required: false
description: Case-sensitive exact match on second-level division name (US county or equivalent).
schema: { type: string }
CityName:
name: CityName
in: query
required: false
description: Case-sensitive exact match on city name.
schema: { type: string }
responses:
ConditionCsv:
description: CSV with a header row and the columns ConditionName, ConditionSNOMED.
content:
text/csv:
schema:
$ref: '#/components/schemas/ConditionRow'
CountryCsv:
description: CSV with a header row and the columns CountryISO, CountryName.
content:
text/csv:
schema:
$ref: '#/components/schemas/CountryRow'
Admin1Csv:
description: CSV with a header row and the columns CountryISO, CountryName, Admin1ISO, Admin1Name.
content:
text/csv:
schema:
$ref: '#/components/schemas/Admin1Row'
Admin2Csv:
description: >-
CSV with a header row and the columns CountryISO, CountryName, Admin1ISO, Admin1Name,
Admin2Name.
content:
text/csv:
schema:
$ref: '#/components/schemas/Admin2Row'
CityCsv:
description: >-
CSV with a header row and the columns CountryISO, CountryName, Admin1ISO, Admin1Name,
Admin2Name, CityName.
content:
text/csv:
schema:
$ref: '#/components/schemas/CityRow'
PathogenCsv:
description: CSV with a header row and the columns PathogenName, PathogenTaxonID.
content:
text/csv:
schema:
$ref: '#/components/schemas/PathogenRow'
SingleColumnCsv:
description: >-
CSV with a header row naming the single variable and one row per available value. The
column name matches the variable named in the operation description.
content:
text/csv:
schema:
type: object
description: One CSV row carrying the single named variable.
additionalProperties: { type: string }
TychoDataCsv:
description: >-
CSV in the Project Tycho Pre-compiled Data Format version 1.0. An offset past the end of
the result set returns the literal text "No results" rather than an empty CSV body.
content:
text/csv:
schema:
$ref: '#/components/schemas/TychoDataRow'
schemas:
ConditionRow:
type: object
description: One row of the /condition listing.
properties:
ConditionName: { type: string, description: Human-readable condition name, e.g. Measles. }
ConditionSNOMED: { type: string, description: SNOMED CT concept id for the condition. }
CountryRow:
type: object
description: One row of the /country listing.
properties:
CountryISO: { type: string, description: ISO 3166-1 alpha-2 country code. }
CountryName: { type: string, description: Country name as used by Project Tycho. }
Admin1Row:
type: object
description: One row of the /admin1 listing.
properties:
CountryISO: { type: string }
CountryName: { type: string }
Admin1ISO: { type: string, description: ISO 3166-2 subdivision code, e.g. US-PA. }
Admin1Name: { type: string }
Admin2Row:
type: object
description: One row of the /admin2 listing.
properties:
CountryISO: { type: string }
CountryName: { type: string }
Admin1ISO: { type: string }
Admin1Name: { type: string }
Admin2Name: { type: string, description: Second-level division, US county or equivalent. }
CityRow:
type: object
description: One row of the /city listing.
properties:
CountryISO: { type: string }
CountryName: { type: string }
Admin1ISO: { type: string }
Admin1Name: { type: string }
Admin2Name: { type: string }
CityName: { type: string }
PathogenRow:
type: object
description: One row of the /pathogen listing.
properties:
PathogenName: { type: string, description: Scientific name of the pathogen. }
PathogenTaxonID: { type: string, description: NCBI Taxonomy identifier. }
TychoDataRow:
type: object
description: >-
One surveillance row in the Project Tycho Pre-compiled Data Format version 1.0. The columns
below are those the published API reference names explicitly as filterable or returned; the
format carries further columns that the reference does not enumerate, and they are
deliberately absent here rather than guessed.
properties:
ConditionName: { type: string }
ConditionSNOMED: { type: string }
PathogenName: { type: string }
PathogenTaxonID: { type: string }
CountryISO: { type: string }
CountryName: { type: string }
Admin1ISO: { type: string }
Admin1Name: { type: string }
Admin2Name: { type: string }
CityName: { type: string }
PeriodStartDate: { type: string, format: date }
PeriodEndDate: { type: string, format: date }
PartOfCumulativeCountSeries: { type: string, enum: ['0', '1'] }
AgeRange: { type: string }
Subpopulation: { type: string }
PlaceOfAcqusition:
type: string
description: Misspelled in Project Tycho's own data format; reproduced verbatim.
DiagnosisCertainty: { type: string }
SourceName: { type: string }
Fatalities: { type: string, enum: ['0', '1'] }