Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Access FDA drug data and WHO global health statistics for research
.claude/skills/brycewang-stanford-medical-data-api/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 55% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 106% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 129% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 39% | 0% |
| case-13 | ✗→✓ | ▲ Improved | 55% | 0% |
This skill covers two major open medical data APIs for academic research:
openFDA is the U.S. Food and Drug Administration's public API providing access to drug labeling (SPL), adverse event reports (FAERS), recalls, and NDC directory. The FAERS dataset contains over 722,000 reports for common drugs like aspirin, making it a primary pharmacovigilance resource.
WHO Global Health Observatory (GHO) is the WHO's OData v4 API serving over 2,000 health indicators across 194 member states -- life expectancy, mortality, disease burden, health system coverage, risk factors, and SDG targets. Returns structured JSON with numeric values, confidence intervals, and dimensional breakdowns by country, sex, and year.
Both APIs are free, require no authentication, and return JSON.
openFDA: No authentication required. An optional API key (free, via https://open.fda.gov/apis/authentication/) increases rate limits from 240/min to 120,000/day. Register at https://open.fda.gov/apis/ to obtain a key, then append &api_key=YOUR_KEY to requests.
WHO GHO: No authentication required. No API key needed. All endpoints are publicly accessible with no registration.
Search FDA-approved drug labeling data (Structured Product Labeling). Returns boxed warnings, indications, dosage, contraindications, and adverse reactions text.
GET https://api.fda.gov/drug/label.json| Parameter | Type | Required | Description | |-----------|--------|----------|-----------------------------------------------------| | search | string | No | Search query using openFDA query syntax | | limit | int | No | Number of results (default 1, max 1000) | | skip | int | No | Offset for pagination | | count | string | No | Count unique values of a field |
bashcurl "https://api.fda.gov/drug/label.json?search=aspirin&limit=1"
meta.results.total (26,564 for "aspirin") and results array. Each result contains boxed_warning, indications_and_usage, dosage_and_administration, warnings, adverse_reactions, drug_interactions, and openfda cross-references (brand/generic names, manufacturer, NDC, pharmacologic class).Search the FDA Adverse Event Reporting System. Each record describes a safety report including patient demographics, suspect drugs, reported reactions, and outcomes.
GET https://api.fda.gov/drug/event.json| Parameter | Type | Required | Description | |-----------|--------|----------|-----------------------------------------------------| | search | string | No | Query (e.g., patient.drug.openfda.brand_name:"aspirin") | | limit | int | No | Number of results (default 1, max 1000) | | skip | int | No | Offset for pagination (max skip+limit = 26,000) | | count | string | No | Count field values (e.g., patient.reaction.reactionmeddrapt.exact) |
bashcurl 'https://api.fda.gov/drug/event.json?search=patient.drug.openfda.brand_name:"aspirin"&limit=1'
meta.results.total (722,607 for aspirin). Each result: safetyreportid, serious (1=yes, 2=no), primarysourcecountry, receivedate, nested patient with patientsex, reaction array (MedDRA terms + reactionoutcome), and drug array with drugcharacterization (1=suspect, 2=concomitant, 3=interacting), medicinalproduct, openfda cross-references.Retrieve data points for a specific health indicator with country, year, and sex dimensions.
GET https://ghoapi.azureedge.net/api/{IndicatorCode}| Parameter | Type | Required | Description | |-----------|--------|----------|-------------------------------------------------------| | $top | int | No | Limit number of records returned | | $skip | int | No | Skip records for pagination | | $filter | string | No | OData filter (e.g., SpatialDim eq 'USA' and TimeDim eq 2020) | | $select | string | No | Select specific fields | | $orderby | string | No | Sort results |
bash# Life expectancy at birth (WHOSIS_000001) curl "https://ghoapi.azureedge.net/api/WHOSIS_000001?\$top=2"
value array. Each record: SpatialDim (ISO country, e.g., "BTN"), ParentLocation (WHO region), TimeDim (year), Dim1 (sex: "SEX_BTSX"/"SEX_MLE"/"SEX_FMLE"), Value ("67.8 67.1-68.6]"), NumericValue (67.845665), Low/High confidence bounds.List available health indicators with their codes and names.
GET https://ghoapi.azureedge.net/api/Indicatorbashcurl "https://ghoapi.azureedge.net/api/Indicator?\$top=5"
IndicatorCode (e.g., "Adult_curr_e-cig"), IndicatorName (e.g., "Prevalence of current e-cigarette use among adults (%)"), Language ("EN"). Over 2,000 indicators spanning mortality, morbidity, health systems, and risk factors.openFDA:
skip + limit cannot exceed 26,000 (use search + sort for deeper access)WHO GHO:
Count reactions by MedDRA term to identify safety signals:
pythonimport requests resp = requests.get("https://api.fda.gov/drug/event.json", params={ "search": 'patient.drug.openfda.brand_name:"aspirin"', "count": "patient.reaction.reactionmeddrapt.exact", "limit": 10 }) for r in resp.json()["results"]: print(f" {r['term']}: {r['count']} reports")
Compare health indicators across countries and time periods:
pythonimport requests resp = requests.get("https://ghoapi.azureedge.net/api/WHOSIS_000001", params={ "$filter": "SpatialDim eq 'JPN' and Dim1 eq 'SEX_BTSX'", "$orderby": "TimeDim desc", "$top": 10 }) for row in resp.json()["value"]: print(f" Japan {row['TimeDim']}: {row['Value']}")
Compare safety language across drug labels for regulatory research:
pythonimport requests for drug in ["ibuprofen", "naproxen", "celecoxib"]: resp = requests.get("https://api.fda.gov/drug/label.json", params={"search": f'openfda.generic_name:"{drug}"', "limit": 1}) results = resp.json().get("results", []) if results: warning = results[0].get("boxed_warning", ["None"])[0][:200] print(f"{drug.upper()}: {warning}...\n")
| Code | Indicator | |------|-----------| | WHOSIS_000001 | Life expectancy at birth | | NCDMORT3070 | NCD mortality (30-70 years) | | MDG_0000000001 | Under-five mortality rate | | WHS4_100 | Physicians per 10,000 population | | NCD_BMI_30A | Prevalence of obesity (BMI >= 30) | | SA_0000001688 | Alcohol per capita consumption | | TOBACCO_0000000262 | Tobacco smoking prevalence |
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 12,873 | 16,767 | +30% | 1 | 1 | 0% | 2,460 | 3,820 | +55% | 0 | 0 | — |
case-02 | pass→pass | 9,831 | 5,372 | -45% | 1 | 1 | 0% | 1,656 | 3,333 | +101% | 0 | 0 | — |
case-03 | pass→pass | 14,841 | 6,430 | -57% | 1 | 1 | 0% | 1,357 | 3,605 | +166% | 0 | 0 | — |
case-04 | fail→pass | 10,260 | 7,547 | -26% | 1 | 1 | 0% | 1,771 | 3,657 | +106% | 0 | 0 | — |
case-05 | pass→pass | 8,951 | 25,658 | +187% | 1 | 1 | 0% | 1,602 | 3,413 | +113% | 0 | 0 | — |
case-06 | pass→pass | 7,553 | 4,643 | -39% | 1 | 1 | 0% | 1,265 | 3,320 | +162% | 0 | 0 | — |
case-07 | pass→pass | 5,556 | 4,747 | -15% | 1 | 1 | 0% | 957 | 3,207 | +235% | 0 | 0 | — |
case-08 | pass→pass | 7,402 | 4,406 | -40% | 1 | 1 | 0% | 1,356 | 3,275 | +142% | 0 | 0 | — |
case-09 | fail→pass | 18,395 | 4,425 | -76% | 1 | 1 | 0% | 1,409 | 3,222 | +129% | 0 | 0 | — |
case-10 | pass→pass | 8,848 | 5,411 | -39% | 1 | 1 | 0% | 1,604 | 3,463 | +116% | 0 | 0 | — |
case-11 | pass→pass | 12,599 | 8,865 | -30% | 1 | 1 | 0% | 1,171 | 4,119 | +252% | 0 | 0 | — |
case-12 | fail→pass | 23,474 | 4,838 | -79% | 1 | 1 | 0% | 2,370 | 3,304 | +39% | 0 | 0 | — |
case-13 | fail→pass | 12,773 | 6,571 | -49% | 1 | 1 | 0% | 2,255 | 3,502 | +55% | 0 | 0 | — |
case-14 | fail→pass | 10,714 | 4,725 | -56% | 1 | 1 | 0% | 1,813 | 3,300 | +82% | 0 | 0 | — |
case-15 | pass→pass | 5,340 | 5,796 | +9% | 1 | 1 | 0% | 996 | 3,465 | +248% | 0 | 0 | — |
case-16 | pass→pass | 6,028 | 6,671 | +11% | 1 | 1 | 0% | 1,121 | 3,564 | +218% | 0 | 0 | — |
case-17 | pass→pass | 10,647 | 7,741 | -27% | 1 | 1 | 0% | 1,664 | 3,747 | +125% | 0 | 0 | — |
case-18 | pass→pass | 8,227 | 8,415 | +2% | 1 | 1 | 0% | 1,372 | 3,313 | +141% | 0 | 0 | — |
case-19 | pass→pass | 10,077 | 7,874 | -22% | 1 | 1 | 0% | 1,715 | 3,662 | +114% | 0 | 0 | — |
case-20 | pass→pass | 3,684 | 5,087 | +38% | 1 | 1 | 0% | 679 | 3,088 | +355% | 0 | 0 | — |
case-21 | pass→pass | 6,088 | 8,884 | +46% | 1 | 1 | 0% | 1,161 | 4,162 | +258% | 0 | 0 | — |
case-22 | pass→pass | 9,723 | 8,570 | -12% | 1 | 1 | 0% | 1,721 | 3,933 | +129% | 0 | 0 | — |
case-23 | pass→pass | 17,168 | 16,336 | -5% | 1 | 1 | 0% | 2,776 | 5,141 | +85% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted, and 22 counted toward the lift figure. The other 1 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +26 percentage points is the difference between those two pass rates over the 22 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.