MétaCan

L'API publique

Lecture seule, JSON, CORS ouvert, sans clé. Chaque point d'accès s'appuie sur les mêmes fonctions que les pages : searchWorks() sert à la fois /works et /api/v1/works, de sorte que l'API ne peut pas répondre à une autre question que la page au-dessus d'elle.

URL de base : https://metacan.xera.ac/api/v1

GET/api/v1/stats/summary

La base en un seul objet : le total des travaux, les comptes sans affiliation et sans résumé, les marginales des quatre voies, et l'histogramme de consensus du tri.

curl -sS https://metacan.xera.ac/api/v1/stats/summary | jq
GET/api/v1/works

Parcourir et chercher toute la base. Plein texte sur les titres, tous les filtres de la page de consultation, paginé.

Le compte est plafonné à 10 000. Compter exactement 4,3 M de rangées coûte des secondes et personne ne lit le nombre ; total_is_capped: true signifie donc « au moins 10 000 », et non « exactement 10 000 ». Paginez s'il vous en faut davantage.
ParamètreTypeSignification
qstringRecherche plein texte sur les titres (tsvector Postgres ; les termes sont liés par ET).
year_from, year_tointBornes inclusives sur l’année de publication.
langstringCode de langue, p. ex. en, fr.
typestringType de travail, p. ex. article, preprint, dissertation.
fieldstringDomaine principal OpenAlex, p. ex. 'Medicine'.
routeaff | fund | venue | about | no_affProvenance par voie : pourquoi le travail est dans la base. no_aff renvoie les travaux SANS affiliation canadienne, ceux qu'une base fondée sur la seule affiliation ne voit jamais.
retracted1Seulement les travaux qu'OpenAlex signale comme rétractés.
no_abstract1Seulement les travaux sans résumé. Le tri y repère moitié moins de métarecherche.
n_in0..3Consensus du tri : combien des trois modèles ont qualifié le travail de métarecherche.
sortcited | year_desc | year_ascPar défaut : cited.
page, per_pageintper_page : 100 au maximum, 25 par défaut.
# Les travaux qu'une base fondée sur la seule affiliation n'aurait jamais vus,
# les plus cités d'abord :
curl -sS "https://metacan.xera.ac/api/v1/works?route=no_aff&sort=cited&per_page=5" | jq '.results[] | {id, title, cited_by, routes}'

# Travaux en français, sans résumé, parus depuis 2015 :
curl -sS "https://metacan.xera.ac/api/v1/works?lang=fr&no_abstract=1&year_from=2015&per_page=5" | jq

# Recherche plein texte :
curl -sS "https://metacan.xera.ac/api/v1/works?q=reproducibility+crisis&per_page=3" | jq '.results[].title'
GET/api/v1/works/{id}

Un travail, tous ses champs, les voies qui l'ont admis, son état Retraction Watch le cas échéant, et les étiquettes et motifs des trois modèles s'il a été trié.

ParamètreTypeSignification
abstract1Récupérer le résumé en direct depuis OpenAlex et le désinverser. Désactivé par défaut : les résumés ne sont pas dans cette base de données, en demander un coûte donc un aller-retour vers l'amont.
# Un travail, avec sa provenance :
curl -sS https://metacan.xera.ac/api/v1/works/W2342586781 | jq '{id, title, routes}'

# Avec le résumé récupéré en direct depuis OpenAlex :
curl -sS "https://metacan.xera.ac/api/v1/works/W2342586781?abstract=1" | jq '.abstract'
GET/api/v1/screened

Les 1 000 travaux triés, avec les niveaux, genres, confiances et motifs des trois modèles, plus le poids de sondage.

L'échantillon est stratifié. Chaque notice porte un weight (l'inverse de la probabilité de sélection). Tout taux calculé sur ces rangées sans appliquer le poids est faux.
ParamètreTypeSignification
contested_only1LE DOSSIER DES DÉSACCORDS : chaque travail qu'au moins un modèle a qualifié de métarecherche. Ce sous-ensemble, et non le taux de base, est le livrable du projet.
n_in0..3Compte de consensus exact.
stratumstringp. ex. aff_core, about_only, french, venue_new, fund_new.
page, per_pageintper_page : 100 au maximum.
# Le dossier des désaccords : les travaux qui marquent la frontière du domaine.
curl -sS "https://metacan.xera.ac/api/v1/screened?contested_only=1" | jq '.meta.summary'

# Les travaux qu'un SEUL modèle a qualifiés de métarecherche :
curl -sS "https://metacan.xera.ac/api/v1/screened?n_in=1" \
  | jq '.results[] | {title, opus: .opus.tier, gpt: .gpt.tier, grok: .grok.tier}'
GET/api/v1/stats/by-route

Les quatre voies : marginales, et combinaisons exactes de voies.

Les voies se recoupent (un travail peut être admis par plusieurs) : marginals totalise donc plus que la base. combinations compte chaque travail une seule fois et totalise le total exact.
curl -sS https://metacan.xera.ac/api/v1/stats/by-route | jq '{no_aff: .meta.no_aff, marginals, combinations: .combinations[:5]}'
GET/api/v1/stats/by-year

Les travaux par année, avec en regard les comptes sans affiliation et sans résumé, parce que les deux écarts évoluent dans le temps.

curl -sS https://metacan.xera.ac/api/v1/stats/by-year | jq '.results[-5:]'
GET/api/v1/stats/by-field

La répartition par domaine, plus les langues, l'écart des résumés par type, les principales revues, les principaux organismes subventionnaires et le dossier de rétractation à quatre états : tout ce que dessine la page Analytique, en un seul appel.

curl -sS https://metacan.xera.ac/api/v1/stats/by-field | jq '.retraction_states'
GET/api/v1/findings

Les 22 constats, servis tels quels depuis le fichier qu’écrivent les scripts du pilote. Chaque nombre cité où que ce soit sur ce site vient d’ici.

curl -sS https://metacan.xera.ac/api/v1/findings | jq '.findings.three_model_screen.headline'

Remarques

  • CORS est ouvert (*). C'est un jeu de données de recherche public sous CC-BY ; l'intérêt de le publier est que vous puissiez l'interroger depuis votre propre page sans serveur mandataire.
  • Cache. Les réponses portent s-maxage=3600. La base est un instantané épinglé : elle ne change pas entre les déploiements, un agrégat un peu vieux n'est donc pas un risque, alors que rebalayer 4,3 M de rangées à chaque requête en serait un.
  • Sans clé, sans limite de débit, mais c'est un seul petit serveur. Restez raisonnable, et s'il vous faut toute la base, prenez le dépôt et reconstruisez-la localement plutôt que d'en paginer quatre millions de rangées hors de cette machine.
  • Licence. Données CC BY 4.0, code MIT. Citez OpenAlex et Retraction Watch comme sources amont.