Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Use when constructing PharmGKB (ClinPGx) Data REST API calls for genes, variants, drugs, clinical annotations, and dosing guidelines: emit the exact base URL, singular camelCase resource paths, PA-accession lookups, view parameter, nested dot-filters, and the data/status envelope — which cheaper models do not do by default.
.claude/skills/pharmgkb-rest-requests/SKILL.md| Model | Eval pass | Runs |
|---|---|---|
| gemini-3.6-flash | 75% | 4 |
| Model | Lift | Δ tokens | Δ turns | Cases | Verified |
|---|---|---|---|---|---|
| gemini-3.6-flashbest | +55% | +85% | 0% | 22 | 53d ago |
| gemini-3.5-flash | pending re-run | — | |||
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-03 | ✗→✓ | ▲ Improved | — | — |
| case-09 | ✗→✓ | ▲ Improved | — | — |
| case-17 | ✗→✓ | ▲ Improved | — | — |
| case-18 | ✗→✓ | ▲ Improved | — | — |
| case-02 | ✗→✓ | ▲ Improved | — | — |
Enforce the PharmGKB (now branded ClinPGx) Data REST API request grammar: the fixed base URL, the exact camelCase resource tokens, accession-by-path vs criteria-by-query lookups, the view detail parameter, nested dot-notation filters, and the {data, status} response envelope. Apply whenever you build, describe, or debug an HTTP call to PharmGKB.
https://api.pharmgkb.org/v1/data. The host is api.pharmgkb.org(never www.pharmgkb.org) and the path prefix is exactly /v1/data (a v1 version segment, then data) — never /api/v1, never /rest, never /v1 alone.
token from this set: gene variant chemical haplotype pathway disease clinicalAnnotation variantAnnotation guidelineAnnotation drugLabel label Never pluralize (genes), never snake_case (clinical_annotation), never capitalize the first letter (Gene).
chemical. PharmGKB models any drug as the chemical resource — not drug, notmedication.
guidelineAnnotation — NOT dosingGuideline (that resourcedoes not exist; the API rejects it as an invalid type), not guideline, not guidelines.
gene/PA124. Returns a single object underdata.
gene?symbol=CYP2C19. Returns an array underdata.
PA followed by digits (e.g. PA124,PA166154053, PA449726). Never place a gene symbol, an rsID, or a bare number where an accession path segment belongs.
view query parameter selects verbosity; the allowed values are min, base,max. Use view=max for the full record and view=min for a compact one (base is the middle default). Do not invent detail=, fields=, full=, or format=.
accessionId, e.g.clinicalAnnotation?relatedChemicals.accessionId=PA449726. Only real object properties are accepted; do not invent flat params like chemicalId=, drug=, or chemical=.
limit, page, per_page, or offset. Unknown query keysare matched to object properties and rejected (No such property: 'limit'). Cap results client-side or request view=min.
{"data": ..., "status": "success"} on success;{"status": "fail", "data": {"errors": [{"message": "..."}]}} on failure. Every record carries an objCls type field (e.g. "objCls":"Gene"). It is never a bare top-level array.
GET https://www.pharmgkb.org/api/genes?name=CYP2C19GET https://api.pharmgkb.org/v1/data/gene?symbol=CYP2C19GET https://api.pharmgkb.org/v1/data/gene?id=PA124&detail=fullGET https://api.pharmgkb.org/v1/data/gene/PA124?view=maxGET https://api.pharmgkb.org/v1/data/dosingGuideline?drug=clopidogrelGET https://api.pharmgkb.org/v1/data/guidelineAnnotation?view=maxGET .../clinicalAnnotations?chemical=galantamine&limit=10GET .../clinicalAnnotation?relatedChemicals.accessionId=PA449726&view=minGET .../snp/rs4244285GET .../variant?symbol=rs4244285variant?symbol=rs4244285 (query), then usethe returned PA... id for a direct variant/PA166154053 fetch.
chemical?name=... first to obtain its PA accession, then filterannotations by relatedChemicals.accessionId=<that PA>.
guidelineAnnotation; there is nodosingGuideline or guideline resource.
data array client-side orrequest view=min.
status:"success" with an empty data array means "no matches"; status:"fail"with data.errors[].message means a bad request (e.g. an unknown property).
api.pharmgkb.org with /v1/data. DON'T use www.pharmgkb.org, /api/v1, or /rest.guidelineAnnotation for dosing guidance. DON'T use dosingGuideline.chemical for a drug. DON'T use drug or medication.gene/PA124). DON'T pass it as ?id=.view=min|base|max. DON'T invent detail=, fields=, or format=.relatedChemicals.accessionId=. DON'T invent chemicalId= or drug=.limit, page, or offset.www.pharmgkb.org or an /api/v1 path instead of api.pharmgkb.org/v1/data.genes, variants, clinicalAnnotations).dosingGuideline instead of guidelineAnnotation.drug / drugs instead of chemical.PA accession path segment belongs.limit= / page= (rejected as an unknown property).{data, status} envelope.https://api.pharmgkb.org/v1/datachemical for drugs; guidelineAnnotation for dosing guidancePA...); search → ?symbol= / ?name=view=min|base|max for detailrelatedChemicals.accessionId=limit / page / offset; <=2 req/s{data, status} envelope + objCls| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-20 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-03 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-09 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-15 | pass→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-17 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-18 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-02 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-12 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-19 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-21 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-05 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-10 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-16 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-04 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-13 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-06 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-07 | pass→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-01 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-08 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-11 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-14 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-22 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
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. 22 cases were attempted. The headline lift of +55 percentage points is the difference between those two pass rates over the 22 comparable cases.
The per-case answers from this run were removed by the retention sweep, so the case table below shows the verdicts without the text either arm produced. The counts above were recorded at the time and are unaffected. Answers are now kept for 180 days.
| Model | Method | Date | Lift |
|---|---|---|---|
| gemini-3.5-flash | verified | 7/10/2026 | +42% |
Other measured skills in the registry, with their headline benchmark lift.