Skip to main content

Documentation Index

Fetch the complete documentation index at: https://developers.openalex.org/llms.txt

Use this file to discover all available pages before exploring further.

OpenAlex data is and will remain available at no cost. Our data snapshot is totally free for bulk download. The API is a freemium service: you get $1 free every day, and after that you pay for what you use. We sell services, not data.

Getting an API Key

To use the API at scale, you need a key. It’s free—just make an account (takes 30 seconds) and copy your key from openalex.org/settings/api. Then add api_key=YOUR_KEY to your API calls:
curl "https://api.openalex.org/works?api_key=YOUR_KEY"

Costs

Pricing by Endpoint

Use per_page=100 to load many results per query—it makes your query budget go much further.
OperationDescriptionCost per 1,000 calls
Get singletonRetrieve a single entity by ID or DOIFree
List+FilterQuery and filter entities$0.10
SearchFull-text keyword search$1
Semantic searchAI-powered semantic search$1
Content downloadCached PDF via content API$10
Text/Aboutness (deprecated)Topic classification$10

Common Activity Costs

ActivityEndpointCallsResultsCost
Search “climate change AND kelp”Search10310,205$0.10
All works from HarvardList+Filter8,707870,627$0.87
Retrieve works by DOI from a listSingleton1,000,0001,000,000Free
Daily research (20 searches, 200 filters, 50 lookups)Mixed270~27,000$0.04
Download 1,000 PDFsContent1,0001,000 PDFs$10.00

What You Can Do for Free Every Day

Your free API key gives you $1 of free usage every day. With that, you can do a mix of:
ActionCallsResultsExample
Get a single entityUnlimitedUnlimitedLook up a work by DOI
List+filter10,0001,000,000All works from MIT in 2024
Search1,000100,000Full-text search for “CRISPR”
Content download100100 PDFsDownload a paper’s full text

Increased Limits

Need more than $1/day? Paid plans give you higher daily allowances and prepaid usage.

Keeping Tabs on Costs

Per Call

Rate Limit Headers

Every API response includes headers showing your current status:
HeaderDescription
X-RateLimit-LimitYour total daily limit
X-RateLimit-RemainingRemaining for today
X-RateLimit-Credits-UsedCost of this request
X-RateLimit-ResetSeconds until reset (midnight UTC)

Response Meta

Every response includes a meta object (see Response Format) with the cost of that request and the total result count, so you can estimate the cost of paginating through all results before committing:
"meta": {
  "count": 870627,
  "db_response_time_ms": 19,
  "page": 1,
  "per_page": 100,
  "groups_count": null,
  "cost_usd": 0.0001
}
Here, cost_usd tells you this call cost $0.0001 (list+filter calls are $0.10 per 1,000), and count tells you 870,627 results at 100 per page = 8,707 calls = $0.87 total.

Overall

Usage Dashboard

Check your usage anytime at openalex.org/settings/usage—accessible from the battery icon in the lower left of openalex.org.

Rate Limit Endpoint

You can also check programmatically via the /rate-limit endpoint:
curl "https://api.openalex.org/rate-limit?api_key=YOUR_KEY"
{
  "api_key": "abc...xyz",
  "rate_limit": {
    "daily_budget_usd": 1,
    "daily_used_usd": 0.05,
    "daily_remaining_usd": 0.95,
    "prepaid_balance_usd": 0,
    "prepaid_remaining_usd": 0,
    "prepaid_expires_at": null,
    "resets_at": "2026-02-20T00:00:00.000Z",
    "resets_in_seconds": 43200,
    "endpoint_costs_usd": {
      "singleton": 0,
      "list": 0.0001,
      "search": 0.001,
      "semantic": 0.01,
      "content": 0.01,
      "text": 0.01
    }
  }
}

Tips

Exceeding Limits

If you exceed your daily limit or make more than 100 requests per second, you’ll get 429 Too Many Requests errors. Individual queries also have these constraints:
LimitValue
OR values per filter100
per_page maximum100
sample maximum10,000
Basic paging limit10,000 results
To retrieve more than 10,000 results, use cursor paging.

Usage Tips

Best practices: Browser testing: The API uses simple GET requests, so you can test any request in your browser. Install a JSON formatter extension for a better experience: Efficient bulk extraction:
# Use maximum page size
requests.get("https://api.openalex.org/works?per_page=100&api_key=YOUR_KEY")

# Batch DOI lookups (up to 100 at once)
dois = "10.1234/a|10.1234/b|10.1234/c"
requests.get(f"https://api.openalex.org/works?filter=doi:{dois}&api_key=YOUR_KEY")