Getting an API Key
API keys are free. Here’s how to get one:- Create a free account at openalex.org
- Go to openalex.org/settings/api to get your key
- Add
api_key=YOUR_KEYto your API calls
Rate Limits
| Plan | Daily Allowance | Requests/Second |
|---|---|---|
| No API key | $0.01 | 100 |
| Free API key | $1 | 100 |
| Paid plan | Higher limits | 100 |
Pricing by Endpoint
| Tier | Example | Cost |
|---|---|---|
| Singleton — Retrieve by ID or DOI | /works/W123 or /works/doi:10.1234/foo | Free |
| List / Filter — Query and filter entities | /works?filter=institution.id:I123 | $0.10 / 1,000 calls |
| Search — Full-text keyword search | /works?search=climate+change | $1 / 1,000 calls |
| Semantic — AI-powered semantic search | /works?search.semantic=climate+change | $10 / 1,000 calls |
| Content Download — Cached PDF via content API | content.openalex.org/works/{id}.pdf | $10 / 1,000 downloads |
| Text/Aboutness (deprecated) | /text/topics | $0.01 / call |
What you can do for free every day
With a free API key ($1/day), you can make per day:- Unlimited singleton requests (they’re free)
- 10,000 list/filter requests, or
- 1,000 search requests, or
- 100 semantic searches or content downloads, or
- Any mix totaling $1
Common Activity Costs
| Activity | Calls | Cost |
|---|---|---|
| Download 1,000 PDFs | 1,000 content downloads | $10 |
| Retrieve 1M Works about “Climate Change AND Kelp” | ~5,000 paginated search calls | $5 |
| Retrieve 1M Works by DOI from a list | 1M singleton calls | Free |
| Filter all Works from an Institution (1M results) | ~5,000 list calls | $0.50 |
| Daily research (20 searches, 200 filters, 50 lookups) | 270 calls | Free |
High-cost endpoints
Some endpoints cost significantly more:| Endpoint | Cost | Daily limit (free) | Notes |
|---|---|---|---|
| Search | $1 / 1,000 calls | ~1,000 requests | ?search= query parameter |
| Semantic search | $10 / 1,000 calls | ~100 requests | ?search.semantic= |
| Content downloads | $10 / 1,000 files | ~100 files | PDF or TEI XML |
Aboutness (/text) | $0.01 / call | ~100 requests | Deprecated |
Rate Limit Headers
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) |
Check Your Status
Check your current rate limit status using the/rate-limit endpoint:
Exceeding Limits
If you exceed your daily limit or make more than 100 requests per second, you’ll get429 Too Many Requests errors.
Best practices:
- Use
per_page=100to reduce the number of requests needed - Batch ID lookups using the OR syntax (up to 100 values per filter)
- Use
select=to limit returned fields for faster responses - Implement exponential backoff when you hit rate limits
Query Limits
Beyond rate limits, individual queries have these constraints:| Limit | Value |
|---|---|
| OR values per filter | 100 |
per_page maximum | 100 |
sample maximum | 10,000 |
| Basic paging limit | 10,000 results |