TheDocumentation Index
Fetch the complete documentation index at: https://developers.openalex.org/llms.txt
Use this file to discover all available pages before exploring further.
search parameter finds results matching a given text search. Search requests cost $1 per 1,000 calls (vs. $0.10 per 1,000 for list+filter requests). See pricing.
What gets searched
Each entity type searches different fields:| Entity | Searchable fields |
|---|---|
| Works | title, abstract, fulltext |
| Authors | display_name, display_name_alternatives |
| Sources | display_name, alternate_titles, abbreviated_title |
| Institutions | display_name, display_name_alternatives, display_name_acronyms |
| Topics/Keywords | display_name, description |
Text processing
OpenAlex uses stemming and removes stop words to improve results:- Words like “the” and “an” are removed
- A search for “possums” also returns “possum”
- Searches match whole words only (“lun” won’t match “lunar”)
Exact (unstemmed) search
Usesearch.exact to search without stemming:
Only one search parameter is allowed per request:
search, search.exact, or search.semantic.Boolean search
UseAND, OR, NOT (uppercase) for complex queries. Surround phrases with double quotes for exact matching:
Words not separated by boolean operators are treated as
AND.Large Boolean queries
Because the query travels in the request URL, the whole request URL is limited to about 4 KB (roughly 4,000 characters). A very longsearch= value — typically a Boolean query with many OR terms, common in systematic reviews — can exceed this and return a 400 error:
OR list into chunks, request each chunk separately, and take the union of the returned IDs client-side. The result is exactly the same set of works:
(X AND (a OR b OR c OR d)) equals (X AND (a OR b)) ∪ (X AND (c OR d)). Putting api_key and mailto in request headers instead of the URL frees a little extra room, but for a large Boolean query you will still need to split it.
Phrase and proximity search
Phrase matching
Use double quotes to search for an exact phrase. Multi-word searches without quotes rank results higher when words appear close together.Proximity search
Append~N to a quoted phrase to find the words within N positions of each other, without requiring an exact match:
Wildcards and fuzzy search
Wildcards
Use* to match zero or more characters and ? to match exactly one character:
- Trailing wildcard:
machin*matches “machine”, “machines”, “machinery” - Single-character wildcard:
wom?nmatches “woman” and “women”
*ology) are not supported.
Fuzzy search
Append~N to a term to allow up to N character edits (insertions, deletions, or substitutions). The edit distance N can be 0, 1, or 2:
~. This is useful for catching typos and spelling variations.
Relevance score
Search results include arelevance_score property and are sorted by it (descending) by default. The score is based on:
- Text similarity to your search term
- Citation count (more cited = higher score)
Semantic search
If you want to match by meaning rather than keywords — or if you’re searching with a long input like an abstract or grant description — semantic search is a better fit. It uses AI embeddings to find conceptually related works even when the wording differs.Legacy: filter-based search
The.search filter suffix searches a specific field rather than all searchable fields at once:
default.search filter is equivalent to the search query parameter. Variants like .search.exact (unstemmed) and .search.no_stem also exist for some fields.
These filter-based searches cost the same $1 per 1,000 requests. For autocomplete use cases, use the autocomplete endpoint instead.