POST /api/openalex/works/search
Price: 5 credits
Search OpenAlex works (papers) by query and filters
Search academic works on OpenAlex. Combine a free-text query (full-text, title-only, abstract-only or fulltext-only) with rich filters: publication year or date range, work type, open-access status, presence of DOI/abstract/full text, retraction status, language, and relationships to a specific author, institution, country, source/venue, ISSN, publisher, funder, topic, concept, keyword or Sustainable Development Goal. Filter by citation count and by citation relationships (cites, cited_by, related_to), and sort by relevance, citation count or publication date. Returns the same rich work objects as the get-by-id endpoint.
access-token string requiredtimeout integer — Max scrapping execution timeout (in seconds) (default: 300; min: 20; max: 1500)search string nullable — Full-text search query across title, abstract and fulltexttitle_search string nullable — Search only within work titlesabstract_search string nullable — Search only within work abstractsfulltext_search string nullable — Search only within work full textpublication_year integer nullable — Exact publication yearfrom_publication_date string nullable — Earliest publication date, YYYY-MM-DD (examples: "2020-01-01")to_publication_date string nullable — Latest publication date, YYYY-MM-DD (examples: "2023-12-31")type string nullable — Work type (one of: "article", "book", "book-chapter", "dataset", "dissertation", "editorial", "erratum", "grant", "letter", "other", "paratext", "peer-review", "preprint", "reference-entry", "report", "retraction", "review", "standard", "supplementary-materials")is_oa boolean nullable — Only open-access works when trueoa_status string nullable — Open-access status (one of: "gold", "green", "hybrid", "bronze", "closed", "diamond")has_doi boolean nullable — Only works that have a DOIhas_abstract boolean nullable — Only works that have an abstracthas_fulltext boolean nullable — Only works with indexed full textis_retracted boolean nullable — Filter by retraction statuslanguage string nullable — ISO 639-1 language code (examples: "en", "de")author_id string nullable — OpenAlex author id of an author of the work (examples: "A5023888391")institution_id string nullable — OpenAlex institution id affiliated with the work (examples: "I27837315")institution_country_code string nullable — ISO country code of an affiliated institution (examples: "US")source_id string nullable — OpenAlex source (venue) id of the work (examples: "S137773608")source_issn string nullable — ISSN of the work source (venue) (examples: "0028-0836")publisher string nullable — OpenAlex publisher id (examples: "P4310319908")funder_id string nullable — OpenAlex funder id (examples: "F4320332161")topic_id string nullable — OpenAlex topic id (examples: "T10102")primary_topic_id string nullable — OpenAlex id of the work's primary topicconcept_id string nullable — OpenAlex concept id (examples: "C41008148")keyword_id string nullable — OpenAlex keyword id (examples: "citation")sdg_id string nullable — Sustainable Development Goal idcited_by_count string nullable — Citation-count filter, supports range operators (examples: "100", ">100", "100-500")cites string nullable — Works that cite this work id (examples: "W2741809807")cited_by string nullable — Works cited by this work id (examples: "W2741809807")related_to string nullable — Works related to this work id (examples: "W2741809807")sort string nullable — Result ordering (one of: "relevance_score:desc", "cited_by_count:desc", "cited_by_count:asc", "publication_date:desc", "publication_date:asc")count integer required — Number of works to return (min: 1)@type string (default: "OpenalexWork")id string requireddoi string nullablepublication_year integer nullablepublication_date string nullablelanguage string nullabletype string nullablepmid string nullablemag_id string nullablecited_by_count integer (default: 0)fwci number nullablereferenced_works_count integer (default: 0)is_retracted boolean (default: false)is_oa boolean nullableoa_status string nullableoa_url string nullableindexed_in array (default: [])citation_normalized_percentile object nullable@type string (default: "OpenalexCitationPercentile")value number nullableis_in_top_1_percent boolean nullableis_in_top_10_percent boolean nullableabstract string nullableprimary_location object nullable@type string (default: "OpenalexWorkLocation")is_oa boolean nullablelanding_page_url string nullablepdf_url string nullablelicense string nullableversion string nullablesource object nullable@type string (default: "OpenalexWorkSource")id string nullabledisplay_name string nullableissn_l string nullabletype string nullableis_oa boolean nullableis_in_doaj boolean nullablehost_organization_name string nullablebest_oa_location object nullable@type string (default: "OpenalexWorkLocation")is_oa boolean nullablelanding_page_url string nullablepdf_url string nullablelicense string nullableversion string nullablesource object nullable@type string (default: "OpenalexWorkSource")id string nullabledisplay_name string nullableissn_l string nullabletype string nullableis_oa boolean nullableis_in_doaj boolean nullablehost_organization_name string nullablebiblio object nullable@type string (default: "OpenalexBiblio")volume string nullableissue string nullablefirst_page string nullablelast_page string nullableprimary_topic object nullable@type string (default: "OpenalexTopic")id string requireddisplay_name string (default: "")score number nullableworks_count integer nullabletopic_share number nullablesubfield string nullablefield string nullabledomain string nullableauthorships array (default: [])@type string (default: "OpenalexAuthorship")id string requireddisplay_name string (default: "")orcid string nullableauthor_position string nullableis_corresponding boolean nullableraw_author_name string nullablecountries array (default: [])institutions array (default: [])@type string (default: "OpenalexWorkInstitution")id string requireddisplay_name string (default: "")ror string nullablecountry_code string nullabletype string nullablecorresponding_author_ids array (default: [])topics array (default: [])@type string (default: "OpenalexTopic")id string requireddisplay_name string (default: "")score number nullableworks_count integer nullabletopic_share number nullablesubfield string nullablefield string nullabledomain string nullablekeywords array (default: [])@type string (default: "OpenalexKeyword")id string requireddisplay_name string (default: "")score number nullableconcepts array (default: [])@type string (default: "OpenalexConcept")id string requireddisplay_name string (default: "")level integer nullablescore number nullablewikidata string nullablemesh array (default: [])@type string (default: "OpenalexMeshTerm")descriptor_ui string nullabledescriptor_name string (default: "")qualifier_ui string nullablequalifier_name string nullableis_major_topic boolean nullablefunders array (default: [])@type string (default: "service__parsers__openalex__works__works__OpenalexFunder")id string requireddisplay_name string (default: "")ror string nullableaward_ids array (default: [])sustainable_development_goals array (default: [])@type string (default: "OpenalexSdg")id string nullabledisplay_name string (default: "")score number nullablereferenced_works array (default: [])related_works array (default: [])counts_by_year array (default: [])@type string (default: "OpenalexCountByYear")year integer requiredworks_count integer nullablecited_by_count integer nullable422 — The request body did not validate Check the fields against this schema. A URN with the wrong prefix is the most common cause.408 — The request ran past its time limit Raise `timeout` in the request body, up to the maximum this endpoint documents. Lowering `count` or turning off the `with_*` flags also helps, because less work finishes sooner.412 — The entity was not found, or a precondition failed Retrying will not help: either the entity does not exist, or the input points at a different one.429 — Too many requests: a rate limit or a usage window is exhausted When the response carries an X-Retry-After header, wait that many seconds and retry: the same number is in the body as `detail.retry_after`, and the limit clears once that window passes. The message in the body names the limit that was hit.500 — Something broke on our side Retrying will not help. If it keeps happening, send us the X-Request-ID from the response headers.529 — Rate limit reached, or the endpoint is overloaded Wait at least 30 seconds, then retry.X-Error — Error message text (present only on error)X-Request-ID — Unique request identifierX-Execution-Time — Execution time in secondsX-Result-Count — How many records the body carries. 0 means an empty result, which is a normal answer and not by itself an error. A non-zero count can come back together with X-Error when the failure happened partway through — read this header and X-Error independently.X-Total-Available-Results — How many records exist for this query, when the endpoint can say. On a `dry_run` request this is the answer and the body is empty. It saturates: the endpoint's documented maximum means 'at least that many', any smaller number is exact.X-Warning — Present when the request body carried keys this endpoint does not document. They were ignored, so any filter you meant to apply through them did not apply. Check the spelling against this schema and retry.X-Retry-After — Seconds to wait before retrying. Present only on 429.