Skill Tracer
Skills › Scientific Agent Skills › pathway-enrichment › verified-api.md

verified-api.md

134 lines · skills/pathway-enrichment/references/verified-api.md at 5f2bc03

Open on GitHub

Most marks come from matching words in the file, so treat them as pointers.

1# Verified release and service contracts
2
3Reviewed 2026-10-01. Tested Python 3.13, GSEApy 1.3.1,
4gprofiler-official 1.0.0 and MyGene 3.2.2. Native synthetic tests cover local ORA,
5classic/multilevel prerank, phenotype GSEA, ssGSEA, GSVA and plotting. Small live
6queries used public example genes only. They establish request/response behavior,
7not biological validity or population-level FDR calibration.
8

Verified release and service contracts

Reviewed 2026-10-01. Tested Python 3.13, GSEApy 1.3.1, gprofiler-official 1.0.0 and MyGene 3.2.2. Native synthetic tests cover local ORA, classic/multilevel prerank, phenotype GSEA, ssGSEA, GSVA and plotting. Small live queries used public example genes only. They establish request/response behavior, not biological validity or population-level FDR calibration.

Raw lines 1 to 8
9## Enrichr / GSEApy
11[Released 1.3.1](https://github.com/zqfang/GSEApy/releases/tag/v1.3.1),
12[Python service client](https://github.com/zqfang/GSEApy/blob/v1.3.1/gseapy/enrichr.py),
13[statistics implementation](https://github.com/zqfang/GSEApy/blob/v1.3.1/src/stats.rs),
14[API reference](https://gseapy.readthedocs.io/en/latest/run.html),
15[provider help](https://maayanlab.cloud/Enrichr/help#api).
17Base: `https://maayanlab.cloud/Enrichr`; public routes need no API key.
18Human and mouse share this base; fly, yeast, worm and fish route to
19`FlyEnrichr`, `YeastEnrichr`, `WormEnrichr` and `FishEnrichr` respectively.
20No pagination is implemented for these catalog, GMT or per-library result routes.
22| Use | Request | Response |
23|---|---|---|
24| Catalog | GET `/datasetStatistics` | `statistics[].libraryName`; live native call verified |
25| Download library | GET `/geneSetLibrary?mode=text&libraryName=...` | tab-delimited term, description, genes; live 50-set Hallmark download verified |
26| Standard query | POST `/addList`, multipart `list` as newline-separated IDs and `description` | `userListId`, `shortId` |
27| Standard result used by 1.3.1 | GET `/export`, `userListId`, `backgroundType`, `filename` | TSV results; columns include `Overlap` |
28| Alternate JSON result | GET `/enrich`, `userListId`, `backgroundType` | object keyed by library, rows as positional arrays |
30Explicit online background uses `https://maayanlab.cloud/speedrichr/api`:
31POST `/addList` with the same multipart fields; POST `/addbackground` with
32form field `background` (newline-separated genes), returning `backgroundid`;
33POST `/backgroundenrich` with form fields `userListId`, `backgroundid`,
34`backgroundType`. JSON is keyed by library; 1.3.1 expects each row as rank,
35term, p, odds ratio, combined score, gene list, adjusted p, legacy p, legacy
36adjusted p. Its parsed DataFrame has no `Overlap` column.
38Standard and Speedrichr submission/export contracts were exercised through the
39**actual installed SDK with mocked HTTP responses**, not live list uploads.
40Nonhuman custom-background routing was not validated; use pinned local GMTs.
41Service rate limits/timeouts and annotation changes remain operational concerns;
421.3.1 lacks finite timeouts on several calls. A stalled request is not an empty
43scientific result. Preserve raw results, query/background and library snapshots.
45Two release/documentation mismatches were resolved against released code/runtime:
47- Online iterable backgrounds do select Speedrichr despite the public wrapper
48 docstring saying they are ignored.
49- Classic GSEA FDR groups by term prefix before `__`; multilevel uses global BH.
50 Extreme native classic prerank sets returned nominal zero p-values despite
51 release notes mentioning a floor. Preserve reported values and describe their
52 finite permutation resolution; do not claim exact zero probability.

Enrichr / GSEApy

Released 1.3.1, Python service client, statistics implementation, API reference, provider help.

Base: https://maayanlab.cloud/Enrichr; public routes need no API key. Human and mouse share this base; fly, yeast, worm and fish route to FlyEnrichr, YeastEnrichr, WormEnrichr and FishEnrichr respectively. No pagination is implemented for these catalog, GMT or per-library result routes.

UseRequestResponse
CatalogGET /datasetStatisticsstatistics[].libraryName; live native call verified
Download libraryGET /geneSetLibrary?mode=text&libraryName=...tab-delimited term, description, genes; live 50-set Hallmark download verified
Standard queryPOST /addList, multipart list as newline-separated IDs and descriptionuserListId, shortId
Standard result used by 1.3.1GET /export, userListId, backgroundType, filenameTSV results; columns include Overlap
Alternate JSON resultGET /enrich, userListId, backgroundTypeobject keyed by library, rows as positional arrays

Explicit online background uses https://maayanlab.cloud/speedrichr/api: POST /addList with the same multipart fields; POST /addbackground with form field background (newline-separated genes), returning backgroundid; POST /backgroundenrich with form fields userListId, backgroundid, backgroundType. JSON is keyed by library; 1.3.1 expects each row as rank, term, p, odds ratio, combined score, gene list, adjusted p, legacy p, legacy adjusted p. Its parsed DataFrame has no Overlap column.

Standard and Speedrichr submission/export contracts were exercised through the actual installed SDK with mocked HTTP responses, not live list uploads. Nonhuman custom-background routing was not validated; use pinned local GMTs. Service rate limits/timeouts and annotation changes remain operational concerns; 1.3.1 lacks finite timeouts on several calls. A stalled request is not an empty scientific result. Preserve raw results, query/background and library snapshots.

Two release/documentation mismatches were resolved against released code/runtime:

  • Online iterable backgrounds do select Speedrichr despite the public wrapper docstring saying they are ignored.
  • Classic GSEA FDR groups by term prefix before __; multilevel uses global BH. Extreme native classic prerank sets returned nominal zero p-values despite release notes mentioning a floor. Preserve reported values and describe their finite permutation resolution; do not claim exact zero probability.
Raw lines 9 to 53
54## g:Profiler
56[Official API documentation](https://biit.cs.ut.ee/gprofiler/page/apis),
57[method/domain documentation](https://biit.cs.ut.ee/gprofiler/page/docs),
58[official Python package](https://pypi.org/project/gprofiler-official/1.0.0/).
59The API page was read directly as server-rendered HTML when web extraction timed out.
61Base `https://biit.cs.ut.ee/gprofiler`; no authentication for these query routes.
62JSON POSTs return `result` and `meta`; no pagination parameters are documented
63for these analysis/mapping calls. `all_results` controls significance filtering,
64not paging. The client has no timeout parameter.
66- `/api/gost/profile/`: `organism`, `query`, `sources`, `background`,
67 `domain_scope`, `ordered`, `all_results`, `no_evidences`,
68 `significance_threshold_method`, `user_threshold`, `numeric_ns`, etc.
69 `p_value` is adjusted. Live `REAC` query for TP53/BRCA1/BRCA2 returned matching
70 genes, per-source domain sizes and metadata. `no_evidences=False` requests
71 intersections; default True omits them. Save `.meta` before another call.
72- `/api/convert/convert/`: `organism`, `query`, `target`, `numeric_ns`.
73 Live Ensembl TP53 conversion to `ENTREZGENE_ACC` returned `7157`; the legacy
74 `ENTREZGENE` target returned `TP53`. Check namespace, not merely nonempty output.
75- `/api/orth/orth/`: `organism`, `target` species, `query`, `numeric_ns`,
76 optional `aresolve`. Live mouse Trp53 → human returned target
77 `ortholog_ensg=ENSG00000141510`. Source `converted` is distinct from target ID.
79Python 1.0.0 omits a trailing slash on mapping URLs (accepted live). It overwrites
80any supplied `domain_scope` with `custom` if `background` is not None, so do not
81claim its wrapper implements custom_annotated. Mapping can be ambiguous or fail;
82query and assay universe must undergo the same mapping policy.

g:Profiler

Official API documentation, method/domain documentation, official Python package. The API page was read directly as server-rendered HTML when web extraction timed out.

Base https://biit.cs.ut.ee/gprofiler; no authentication for these query routes. JSON POSTs return result and meta; no pagination parameters are documented for these analysis/mapping calls. all_results controls significance filtering, not paging. The client has no timeout parameter.

  • /api/gost/profile/: organism, query, sources, background, domain_scope, ordered, all_results, no_evidences, significance_threshold_method, user_threshold, numeric_ns, etc. p_value is adjusted. Live REAC query for TP53/BRCA1/BRCA2 returned matching genes, per-source domain sizes and metadata. no_evidences=False requests intersections; default True omits them. Save .meta before another call.
  • /api/convert/convert/: organism, query, target, numeric_ns. Live Ensembl TP53 conversion to ENTREZGENE_ACC returned 7157; the legacy ENTREZGENE target returned TP53. Check namespace, not merely nonempty output.
  • /api/orth/orth/: organism, target species, query, numeric_ns, optional aresolve. Live mouse Trp53 → human returned target ortholog_ensg=ENSG00000141510. Source converted is distinct from target ID.

Python 1.0.0 omits a trailing slash on mapping URLs (accepted live). It overwrites any supplied domain_scope with custom if background is not None, so do not claim its wrapper implements custom_annotated. Mapping can be ambiguous or fail; query and assay universe must undergo the same mapping policy.

Raw lines 54 to 83
84## MSigDB
86[Official releases/collections](https://www.gsea-msigdb.org/gsea/msigdb),
87[human collections](https://www.gsea-msigdb.org/gsea/msigdb/human/collections.jsp),
88[mouse collections](https://www.gsea-msigdb.org/gsea/msigdb/mouse/collections.jsp),
89[GSEApy downloader source](https://github.com/zqfang/GSEApy/blob/v1.3.1/gseapy/msigdb.py).
91Current human/mouse release: **2026.1.Hs / 2026.1.Mm**. GSEApy does unauthenticated
92GETs at `https://data.broadinstitute.org/gsea-msigdb/msigdb/release/`, then the
93release directory and `{category}.v{dbver}.{symbols|entrez}.gmt`. Directory
94HTML parsing requires lxml; there is no result pagination. Live listing,
95human categories and 50-set `h.all` download succeeded. The website requests
96registration and license compliance independently of public file availability.
97Mouse category and namespace must both match its own release. Neither a year
98in an Enrichr library name nor a successful download proves current gene mapping.

MSigDB

Official releases/collections, human collections, mouse collections, GSEApy downloader source.

Current human/mouse release: 2026.1.Hs / 2026.1.Mm. GSEApy does unauthenticated GETs at https://data.broadinstitute.org/gsea-msigdb/msigdb/release/, then the release directory and {category}.v{dbver}.{symbols|entrez}.gmt. Directory HTML parsing requires lxml; there is no result pagination. Live listing, human categories and 50-set h.all download succeeded. The website requests registration and license compliance independently of public file availability. Mouse category and namespace must both match its own release. Neither a year in an Enrichr library name nor a successful download proves current gene mapping.

Raw lines 84 to 99
100## Identifier services
102[BioMart REST/XML documentation](https://www.ensembl.org/info/data/biomart/biomart_restful.html),
103[GSEApy BioMart source](https://github.com/zqfang/GSEApy/blob/v1.3.1/gseapy/biomart.py),
104[MyGene query API](https://docs.mygene.info/en/latest/doc/query_service.html),
105[MyGene Python client](https://github.com/biothings/mygene.py).
107BioMart uses public `/biomart/martservice`: metadata GETs for registry, datasets,
108attributes and filters, then XML query via GET `query` or POST form `query`.
109It returns an attribute-ordered tabular stream, not paginated JSON. GSEApy batches
110long identifier filters. The default-host live query yielded service-unavailable
111HTML that the SDK accepted as a one-column DataFrame. Validate expected columns
112and identifiers; this observation does not establish retirement. A successful
113live BioMart mapping was **not** obtained.
115MyGene `querymany` uses public POST `https://mygene.info/v3/query` with `q`,
116`scopes`, `fields`, `species`; batching is handled by the client. Its list response
117has `query` plus matching fields or `notfound`; one input can yield multiple rows.
118`returnall=True` adds client diagnostics `dup` and `missing`. A live single-ID
119query returned TP53/7157. The separate GET search uses `size`/`from` or
120`fetch_all`/`scroll_id`; these search pagination controls are not querymany batch
121identifiers. Querying human with a mouse symbol is not orthology mapping.

Identifier services

BioMart REST/XML documentation, GSEApy BioMart source, MyGene query API, MyGene Python client.

BioMart uses public /biomart/martservice: metadata GETs for registry, datasets, attributes and filters, then XML query via GET query or POST form query. It returns an attribute-ordered tabular stream, not paginated JSON. GSEApy batches long identifier filters. The default-host live query yielded service-unavailable HTML that the SDK accepted as a one-column DataFrame. Validate expected columns and identifiers; this observation does not establish retirement. A successful live BioMart mapping was not obtained.

MyGene querymany uses public POST https://mygene.info/v3/query with q, scopes, fields, species; batching is handled by the client. Its list response has query plus matching fields or notfound; one input can yield multiple rows. returnall=True adds client diagnostics dup and missing. A live single-ID query returned TP53/7157. The separate GET search uses size/from or fetch_all/scroll_id; these search pagination controls are not querymany batch identifiers. Querying human with a mouse symbol is not orthology mapping.

Raw lines 100 to 122
123## Scientific interpretation and adjacent APIs
125[GSEA User Guide](https://docs.gsea-msigdb.org/GSEA/GSEA_User_Guide/),
126[GSEA FAQ](https://docs.gsea-msigdb.org/GSEA/GSEA_FAQ/),
127[decoupler PROGENy reference](https://decoupler.scverse.org/en/latest/api/generated/decoupler.op.progeny.html).
129GSEA size filters use genes intersecting the rank. Class-label permutations
130require exchangeability; gene-set permutations change the null and lose gene
131correlations. Enrichment sign is rank direction, not proof of pathway activation.
132Decoupler is a documentation-only pointer here; no decoupler model downloads or
133activity-inference runs were made. Reactome/KEGG/STRING raw APIs remain delegated
134to `database-lookup`; this skill does not invent duplicate endpoint examples.

Scientific interpretation and adjacent APIs

GSEA User Guide, GSEA FAQ, decoupler PROGENy reference.

GSEA size filters use genes intersecting the rank. Class-label permutations require exchangeability; gene-set permutations change the null and lose gene correlations. Enrichment sign is rank direction, not proof of pathway activation. Decoupler is a documentation-only pointer here; no decoupler model downloads or activity-inference runs were made. Reactome/KEGG/STRING raw APIs remain delegated to database-lookup; this skill does not invent duplicate endpoint examples.

Raw lines 123 to 134
Names a skill database-lookup :134