---
canonical_url: "https://docs.composio.dev/toolkits/openalex"
markdown_url: "https://docs.composio.dev/toolkits/openalex.md"
product: "platform"
version: null
last_updated: null
---

# OpenAlex

OpenAlex is an open catalog of scholarly works, authors, institutions, sources, topics, and related research metadata.

- **Category:** web search & research
- **Auth:** API_KEY
- **Composio-managed OAuth available?** N/A
- **Tools:** 19
- **Triggers:** 0
- **Slug:** `OPENALEX`
- **Version:** 20261014_01
- **Instant:** Supported on the latest version. Support varies by tool.

## Tools

### Add Collection Entities

**Slug:** `OPENALEX_ADD_COLLECTION_ENTITIES`

Bulk-add one or more matching OpenAlex entity IDs to an owned collection without duplicating existing memberships.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `entity_ids` | array | Yes | One to 1000 unique, nonempty OpenAlex IDs matching the collection's entity type. |
| `collection_id` | string | Yes | Owned collection ID in col_XXXXXXXXXX form. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Autocomplete Entities

**Slug:** `OPENALEX_AUTOCOMPLETE_ENTITIES`

Resolve a partial name or title to likely OpenAlex entity IDs before filtering or retrieving metadata.

**Instant:** Supported on the latest version.

**Instant pricing:** Estimated $0–$0.001 per autocomplete request

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `query` | string | Yes | Partial title or name to resolve. |
| `filter` | string | No | Optional OpenAlex filter expression used to narrow candidates. |
| `search` | string | No | Optional additional keyword constraint sent alongside query. Use query for the partial name or title and filter for an OpenAlex filter expression. |
| `entity_type` | string ("works" | "authors" | "sources" | "institutions" | "topics" | "keywords" | "publishers" | "funders") | Yes | Entity type to resolve. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Create Collection

**Slug:** `OPENALEX_CREATE_COLLECTION`

Create a private, single-entity-type OpenAlex collection, optionally with an initial bounded set of entity IDs.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `entity_ids` | array | No | Optional initial OpenAlex IDs of the selected entity type. Supply at most 1000 unique IDs. |
| `description` | string | No | Optional collection description, up to 500 characters. |
| `entity_type` | string ("works" | "authors" | "sources" | "institutions" | "topics" | "sdgs" | "funders" | "publishers" | "keywords" | "concepts") | Yes | The only OpenAlex entity type this collection may contain. |
| `display_name` | string | Yes | Collection name (1-30 characters). |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Delete Collection

**Slug:** `OPENALEX_DELETE_COLLECTION`

Permanently delete exactly one owned private OpenAlex collection and all of its collection memberships. This does not delete the underlying OpenAlex entities.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `collection_id` | string | Yes | Exact owned collection ID in col_XXXXXXXXXX form to permanently delete. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Download Work Content

**Slug:** `OPENALEX_DOWNLOAD_WORK_CONTENT`

Download an OpenAlex-cached PDF or gzipped GROBID TEI file for a work. Choose the format matching the work's has_content flags. Each call currently costs $0.01, and source copyright terms still apply. Downloads are limited to 25 MB; compressed TEI must also remain within 25 MB after expansion.

**Instant:** Supported on the latest version.

**Instant pricing:** $0.01 per content download

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `format` | string ("pdf" | "tei_xml") | Yes | Content format to download. Use pdf only when has_content.pdf=true; use tei_xml only when has_content.grobid_xml=true. TEI XML is returned as a gzip file. |
| `work_id` | string | Yes | Short OpenAlex work ID, such as W3038568908. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Get Changefile

**Slug:** `OPENALEX_GET_CHANGEFILE`

Retrieve changed entity counts and JSONL/Parquet download details for one OpenAlex changefile date. Requires an OpenAlex paid plan; inspect GET_RATE_LIMIT_STATUS for daily capacity and current endpoint cost.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `date` | string | Yes | Changefile date in YYYY-MM-DD format. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Get Collection

**Slug:** `OPENALEX_GET_COLLECTION`

Get metadata for one private OpenAlex collection owned by the connected user.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `collection_id` | string | Yes | Collection ID in col_XXXXXXXXXX form. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Get Concept

**Slug:** `OPENALEX_GET_CONCEPT`

Retrieve one item from the deprecated, frozen OpenAlex Concepts taxonomy for legacy workflows. Prefer Topics through GET_ENTITY for new work; use select to limit returned fields.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `id` | string | Yes | OpenAlex concept ID or canonical OpenAlex concept URL. |
| `select` | string | No | Comma-separated top-level concept fields to return; omit for all fields. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Get Metadata Entity

**Slug:** `OPENALEX_GET_ENTITY`

Retrieve one OpenAlex work, author, source, institution, topic, keyword, publisher, funder, award, taxonomy item, country, continent, or language by its supported identifier. Returns the provider's entity object directly; use select to limit its top-level fields.

**Instant:** Supported on the latest version.

**Instant pricing:** $0 per request

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `id` | string | Yes | OpenAlex ID or supported external ID: DOI/PMID/PMCID/MAG for works, ORCID for authors, ISSN for sources, ROR for institutions, Crossref ID for funders, ISO code for countries/languages, or the documented resource ID. Bare work DOIs such as 10.7717/peerj.4375 are accepted and converted to OpenAlex's canonical https://doi.org/ form. |
| `select` | string | No | Comma-separated top-level fields to return; omit for the complete entity. |
| `entity_type` | string ("works" | "authors" | "sources" | "institutions" | "topics" | "keywords" | "publishers" | "funders" | "awards" | "domains" | "fields" | "subfields" | "sdgs" | "countries" | "continents" | "languages") | Yes | Entity resource matching the identifier. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Get Rate Limit Status

**Slug:** `OPENALEX_GET_RATE_LIMIT_STATUS`

Validate the connected OpenAlex API key and inspect daily budget, prepaid balance, reset timing, and current endpoint costs before expensive queries or downloads.

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Infer Topics from Text

**Slug:** `OPENALEX_INFER_TOPICS_FROM_TEXT`

Use OpenAlex's deprecated legacy classifier to infer topics from a required title, optionally accompanied by an abstract. Not recommended for new projects; costs $0.01 per request.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `title` | string | Yes | Title text to classify. Title plus optional abstract must contain 20-2000 combined trimmed characters. |
| `abstract` | string | No | Optional abstract text used with the title. Combined trimmed title and abstract length must be 20-2000 characters. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### List Changefiles

**Slug:** `OPENALEX_LIST_CHANGEFILES`

List all available OpenAlex changefile dates and detail URLs. Requires an OpenAlex paid plan. Keep aggregate traffic below 100 requests per second and inspect GET_RATE_LIMIT_STATUS for daily capacity and current endpoint cost.

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### List Collection Entities

**Slug:** `OPENALEX_LIST_COLLECTION_ENTITIES`

List one page of entity IDs in an owned private collection together with collection metadata and page totals.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `page` | integer | No | One-based page number. |
| `per_page` | integer | No | Maximum entity IDs in this page (1-200). |
| `collection_id` | string | Yes | Owned collection ID in col_XXXXXXXXXX form. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### List My Collections

**Slug:** `OPENALEX_LIST_MY_COLLECTIONS`

List private OpenAlex collections owned by the connected API-key user, optionally finding collections that contain an entity.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `page` | integer | No | One-based page number. |
| `per_page` | integer | No | Maximum collections in this page (1-100). |
| `entity_id` | string | No | Entity ID used to find owned collections containing that entity. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Query Concepts

**Slug:** `OPENALEX_QUERY_CONCEPTS`

Query the deprecated, frozen OpenAlex Concepts taxonomy for legacy workflows. Prefer Topics through QUERY_ENTITIES for new work. Returns one cursor-controlled page; keep aggregate traffic below 100 requests per second and monitor the connected key's daily USD budget.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `sort` | string | No | Concept sort expression such as cited_by_count:desc. Cannot be combined with sample. |
| `cursor` | string | No | Omit for the first page, or pass the prior next_cursor unchanged for the next page. |
| `filter` | string | No | OpenAlex concept filter expression. Separate AND clauses with commas and OR values with pipes. |
| `sample` | integer | No | Random sample size from 1 to 10000. Cannot be combined with sort. |
| `search` | string | No | Keyword search over concept names and descriptions. |
| `select` | string | No | Comma-separated top-level concept fields to return. |
| `group_by` | string | No | Supported concept field to aggregate instead of returning concepts. |
| `per_page` | integer | No | Maximum concepts or groups in this page (1-100). |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Query Metadata Entities

**Slug:** `OPENALEX_QUERY_ENTITIES`

Search, filter, sort, sample, select, or group one OpenAlex metadata resource other than works, including authors, venues, organizations, taxonomy, geography, awards, and enumerations. Returns one cursor-controlled page.

**Instant:** Supported on the latest version.

**Instant pricing:** $0.001 per 10 list/filter calls or $0.001 per search calls

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `sort` | string | No | Resource-specific sort expression, such as cited_by_count:desc. |
| `cursor` | string | No | Use * for the first cursor-controlled page, or pass the previous response's next_cursor unchanged to fetch the next page. |
| `filter` | string | No | Resource-specific OpenAlex filter expression. Separate AND clauses with commas and OR values with pipes. |
| `sample` | integer | No | Optional random sample size from 1 to 10000; cannot be combined with sort. |
| `search` | string | No | Resource-specific keyword search over documented names and descriptions. |
| `select` | string | No | Comma-separated top-level response fields to reduce payload. |
| `group_by` | string | No | Supported field to aggregate. Grouped responses contain group rows instead of entities. |
| `per_page` | integer | No | Maximum entities or groups in this page (1-100). |
| `entity_type` | string ("authors" | "sources" | "institutions" | "topics" | "keywords" | "publishers" | "funders" | "awards" | "domains" | "fields" | "subfields" | "sdgs" | "countries" | "continents" | "languages" | "work-types" | "source-types" | "institution-types" | "licenses" | "indexes") | Yes | Metadata resource to query. Use sources for journals and repositories, and institutions for organizations. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Query Works

**Slug:** `OPENALEX_QUERY_WORKS`

Search, filter, sort, sample, select, or group scholarly works. Returns one cursor-controlled page and its OpenAlex query cost; use the snapshot for whole-catalog exports.

**Instant:** Supported on the latest version.

**Instant pricing:** $0.001 per 10 list/filter calls or $0.001 per search calls

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `seed` | integer | No | Seed for a repeatable random sample. Valid only when sample is set. |
| `sort` | string | No | Work sort expression. Cannot be combined with sample. |
| `cursor` | string | No | Use * for the first page or pass the prior next_cursor unchanged for the next page. |
| `filter` | string | No | OpenAlex filter expression. Commas mean AND and pipes mean OR. |
| `sample` | integer | No | Random sample size (1-10000). Cannot be combined with sort. |
| `search` | string | No | Keyword search across work titles, abstracts, and indexed full text. |
| `select` | string | No | Comma-separated top-level work fields to return. |
| `group_by` | string | No | Supported work field to aggregate instead of returning work records. |
| `per_page` | integer | No | Maximum works or groups in this page (1-100). |
| `exact_search` | string | No | Unstemmed exact search. Cannot be combined with another search mode. |
| `semantic_search` | string | No | Meaning-based search. Cannot be combined with another search mode and currently costs $0.001 per call. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Remove Collection Entities

**Slug:** `OPENALEX_REMOVE_COLLECTION_ENTITIES`

Bulk-remove one or more entity memberships from an owned private OpenAlex collection without deleting the underlying OpenAlex entities.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `entity_ids` | array | Yes | One to 1000 unique, exact OpenAlex entity IDs to remove. |
| `collection_id` | string | Yes | Owned collection ID. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Update Collection

**Slug:** `OPENALEX_UPDATE_COLLECTION`

Update a private collection's name or description, or change its entity type while the collection is empty. Provide at least one of display_name, description, or entity_type.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `description` | string | No | New description, up to 500 characters. Use an empty string to clear it. |
| `entity_type` | string ("works" | "authors" | "sources" | "institutions" | "topics" | "sdgs" | "funders" | "publishers" | "keywords" | "concepts") | No | New entity type. OpenAlex permits this change only while the collection is empty. |
| `display_name` | string | No | New collection name (1-30 characters). |
| `collection_id` | string | Yes | Owned collection ID in col_XXXXXXXXXX form. At least one update field is required. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |
