Provided by OpenAlex
Filter and Count Scholarly Papers by Year, Author, Institution or Topic
List OpenAlex scholarly works that match named fields — publication year or date range, open-access flag, retracted flag, work type, language, DOI, OpenAlex author id, institution ROR, topic id, and a minimum or maximum citation count — and get back the matching papers with their authors, host journal, citation count and DOI. Set group_by instead to get counts per year, type, language, topic, institution or country rather than the papers themselves. Takes no free-text query: use the text search endpoint for that.
Contract snapshot: 2026-09-29. Inspect in Glasser for current terms.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"doi": {
"type": "string",
"pattern": "^(https:\\/\\/doi\\.org\\/)?10\\.\\d{4,9}\\/\\S+$"
},
"page": {
"type": "integer",
"maximum": 100,
"minimum": 1
},
"sort": {
"enum": [
"cited_by_count:desc",
"cited_by_count:asc",
"publication_date:desc",
"publication_date:asc"
],
"type": "string"
},
"is_oa": {
"type": "boolean"
},
"cursor": {
"type": "string",
"maxLength": 500,
"minLength": 1
},
"group_by": {
"enum": [
"publication_year",
"type",
"open_access.is_oa",
"language",
"primary_topic.id",
"authorships.institutions.ror",
"authorships.institutions.country_code"
],
"type": "string"
},
"language": {
"type": "string",
"pattern": "^[a-z]{2}$"
},
"per_page": {
"type": "integer",
"maximum": 100,
"minimum": 1
},
"topic_id": {
"type": "string",
"pattern": "^T\\d{4,8}$"
},
"author_id": {
"type": "string",
"pattern": "^A\\d{4,12}$"
},
"work_type": {
"enum": [
"article",
"preprint",
"review",
"book",
"book-chapter",
"dataset",
"dissertation",
"letter",
"editorial",
"erratum",
"report",
"standard",
"other"
],
"type": "string"
},
"is_retracted": {
"type": "boolean"
},
"institution_ror": {
"type": "string",
"pattern": "^(https:\\/\\/ror\\.org\\/)?0[a-hj-km-np-tv-z0-9]{6}[0-9]{2}$"
},
"publication_year": {
"type": "integer",
"maximum": 2100,
"minimum": 1000
},
"cited_by_count_max": {
"type": "integer",
"maximum": 100000000,
"minimum": 0
},
"cited_by_count_min": {
"type": "integer",
"maximum": 100000000,
"minimum": 0
},
"to_publication_date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"from_publication_date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
}
},
"additionalProperties": false
}{
"per_page": 10,
"institution_ror": "00f54p054",
"publication_year": 2024
}This Endpoint publishes no output schema. You get the Provider's own response body, unchanged — we do not warrant a shape we cannot guarantee.
How to run it
Two fields identify it: the Provider and the endpoint key. The key looks like a path because it usually mirrors the Provider's own, but it is an opaque identifier — not a URL you can open. The same provider:endpoint pair is what your Policy lists.
Once: paste this into your agent's chat. The Skill installs the CLI and logs in by itself. For an agent that cannot use a shell, connect it over MCP instead.
set up https://glasser.ai/SKILL.mdThen ask for this Endpoint:
Run the OpenAlex Endpoint /works on Glasser with input {"per_page":10,"institution_ror":"00f54p054","publication_year":2024}glasser run -p openalex -e '/works' -i '{"per_page":10,"institution_ror":"00f54p054","publication_year":2024}' --endpoint-version 1Pinned to version 1, the one this page shows: if a newer version is published first, the Run is refused instead of charged under new terms. Install and log in first on Get Started.
Once per Run:
IDEMPOTENCY_KEY=$(uuidgen)Run it, and copy this same block to send it again:
curl -X POST https://api.glasser.ai/v1/runs \
-H "Authorization: Bearer gl_..." \
-H "Idempotency-Key: $IDEMPOTENCY_KEY" \
-H "Content-Type: application/json" \
-d '{"provider":"openalex","endpoint":"/works","input":{"per_page":10,"institution_ror":"00f54p054","publication_year":2024},"endpoint_version":1}'Reuse the same Idempotency-Key to send it again: the second send is a read of the first Run. A new key is a new Run and a new Charge. Pinned to version 1 for the same reason as the CLI.
What each outcome charges
| No result | The Provider answered: nothing matched. | $0.0002 |
|---|---|---|
| Provider error | The Provider failed to answer. | $0.00 |
| Timed out | The deadline won. | $0.00 |
| Internal failure | Our defect. | $0.00 |