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.
| Operation | Description | Cost per 1,000 calls |
|---|
| Get singleton | Retrieve a single entity by ID or DOI | Free |
| List+Filter | Query and filter entities | $0.10 |
| Search | Full-text keyword search | $1 |
| Semantic search | AI-powered semantic search | $1 |
| Content download | Cached PDF via content API | $10 |
| Text/Aboutness (deprecated) | Topic classification | $10 |
Common Activity Costs
| Activity | Endpoint | Calls | Results | Cost |
|---|
| Search “climate change AND kelp” | Search | 103 | 10,205 | $0.10 |
| All works from Harvard | List+Filter | 8,707 | 870,627 | $0.87 |
| Retrieve works by DOI from a list | Singleton | 1,000,000 | 1,000,000 | Free |
| Daily research (20 searches, 200 filters, 50 lookups) | Mixed | 270 | ~27,000 | $0.04 |
| Download 1,000 PDFs | Content | 1,000 | 1,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:
| Action | Calls | Results | Example |
|---|
| Get a single entity | Unlimited | Unlimited | Look up a work by DOI |
| List+filter | 10,000 | 1,000,000 | All works from MIT in 2024 |
| Search | 1,000 | 100,000 | Full-text search for “CRISPR” |
| Content download | 100 | 100 PDFs | Download 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
Every API response includes headers showing your current status:
| Header | Description |
|---|
X-RateLimit-Limit | Your total daily limit |
X-RateLimit-Remaining | Remaining for today |
X-RateLimit-Credits-Used | Cost of this request |
X-RateLimit-Reset | Seconds until reset (midnight UTC) |
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:
| Limit | Value |
|---|
| OR values per filter | 100 |
per_page maximum | 100 |
sample maximum | 10,000 |
| Basic paging limit | 10,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")