OpenAlex without an API key: 1,000 requests a day, and mailto no longer helps

Checked 2026-09-08 · Academic and code sources

An anonymous call to api.openalex.org comes back with x-ratelimit-limit: 1000 and x-ratelimit-limit-usd: 0.1 — a budget of 1,000 list requests a day per client, resetting at midnight UTC. Adding mailto= does not change either number, so the polite-pool advice still in the docs buys you nothing on the limit. The 100,000-credit figure in the docs is the free-API-key tier, not the anonymous one.

What we saw

Anonymous request returns a credit budget of 1,000 requests and $0.10. Source (response headers, 2026-09-08).

x-ratelimit-cost-usd: 0.0001
x-ratelimit-credits-used: 1
x-ratelimit-limit: 1000
x-ratelimit-limit-usd: 0.1
x-ratelimit-onetime-remaining: 0
x-ratelimit-prepaid-remaining-usd: 0
x-ratelimit-remaining: 996
x-ratelimit-remaining-usd: 0.0996
x-ratelimit-reset: 68563

Adding mailto= leaves the limit at 1000 and still costs one credit. Source (response headers, 2026-09-08).

x-ratelimit-limit: 1000
x-ratelimit-limit-usd: 0.1
x-ratelimit-remaining: 994
x-ratelimit-credits-used: 1

A 200-record page costs the same one credit as a 1-record page, so per-page=200 is 200x cheaper per record. Source (response headers plus meta.cost_usd, 2026-09-08).

x-ratelimit-credits-used: 1
x-ratelimit-cost-usd: 0.0001
cost_usd 0.0001 n 200

per-page above 200 is rejected with HTTP 400 and a plain message. Source (error body, 2026-09-08).

http=400
{"error":"Pagination error.","message":"per-page parameter must be between 1 and 200."}

Offset paging stops dead at 10,000 records; cursor paging is the only way past it. Source (error body, 2026-09-08).

http=400
{"error":"Pagination error.","message":"Maximum results size of 10,000 records is exceeded. Cursor pagination is required for records beyond 10,000. See: https://developers.openalex.org/guides/page-through-results"}

cursor=* starts the cursor and the next one arrives in meta.next_cursor; meta.page is null on a cursor request. Source (meta, 2026-09-08).

{
 "count": 10894484,
 "db_response_time_ms": 21,
 "page": null,
 "per_page": 2,
 "next_cursor": "IlsxMDAuMCwgMTk5NTAsICdodHRwczovL29wZW5hbGV4Lm9yZy9XNDMyMDAxMzkzNiddIg==",
 "groups_count": null,
 "cost_usd": 0.0001
}

The docs page still describes the polite pool and quotes 100,000 credits per day for free users, which is the keyed tier, not what an anonymous call gets. Source (lines 19-20 and 75-87, 2026-09-08).

* max **100,000 credits** per day for free users, and also
* max **100 requests** per second (regardless of credit cost).
...
## The polite pool
...
To get into the polite pool, you just have to give us an email where we can contact you.

The command

curl -sS -D - -o body.json 'https://api.openalex.org/works?filter=publication_year:2023&per-page=2&cursor=*' | grep -iE '^x-ratelimit'
x-ratelimit-cost-usd: 0.0001
x-ratelimit-credits-used: 1
x-ratelimit-limit: 1000
x-ratelimit-limit-usd: 0.1
x-ratelimit-onetime-remaining: 0
x-ratelimit-prepaid-remaining-usd: 0
x-ratelimit-remaining: 996
x-ratelimit-remaining-usd: 0.0996
x-ratelimit-reset: 68563

Checked 2026-09-08.

for u in '...?per-page=1' '...?per-page=1&mailto=maintainer@opendatanotes.org' '...?per-page=200&select=id&mailto=...'; do curl -sS -D - -o body.json "$u" | grep -iE '^x-ratelimit-(limit|remaining|credits)'; done
x-ratelimit-limit: 1000
x-ratelimit-remaining: 995
x-ratelimit-credits-used: 1
x-ratelimit-limit: 1000
x-ratelimit-remaining: 994
x-ratelimit-credits-used: 1
x-ratelimit-limit: 1000
x-ratelimit-remaining: 993
x-ratelimit-credits-used: 1

Checked 2026-09-08.

curl -sS 'https://api.openalex.org/works?filter=publication_year:2023&per-page=100&page=101'
{"error":"Pagination error.","message":"Maximum results size of 10,000 records is exceeded. Cursor pagination is required for records beyond 10,000. See: https://developers.openalex.org/guides/page-through-results"}

Checked 2026-09-08.

what you sendx-ratelimit-limitcredits usedrecords back
per-page=1, no mailto100011
per-page=1, mailto=100011
per-page=200 + select=id, mailto=10001200
per-page=201--HTTP 400, rejected
per-page=100&page=101--HTTP 400, 10,000-record wall

Limits

Open question

Is the 1,000-credit anonymous budget scoped to the IP, or to the IP plus User-Agent? Two clients behind one address would then share it.

Plain text