Rate Limits#
Rate Limits#
Lookup Limits#
User Type |
Lookups/Day |
Included API calls/month |
Notes |
|---|---|---|---|
Anonymous |
20 |
– |
No account needed |
Free account |
60 |
– |
Sign up at my.turtletech.us |
Academic plan |
20,000 |
10,000 |
EUR 4/month |
Business plan |
20,000 |
40,000 |
EUR 10/month |
What Counts as a Lookup?#
Action |
Counts? |
|---|---|
DOI lookup (new paper) |
Yes |
ISBN lookup (new book) |
Yes |
Reverse lookup (paste text) |
Yes |
DOI/ISBN already in your collection |
No |
Manual entry |
No |
Re-format (change style) |
No |
Format endpoint |
No |
Group citation |
No |
Health check |
No |
Papers saved in your collections are free to re-lookup as long as they remain in the collection. Removing a paper means the next lookup will count against quota.
Paid plans allow usage beyond the included monthly API amount; overage usage is recorded for billing. The daily lookup limit still applies.
Batch and Collection Operations#
Batch formatting and verification use the normal lookup quota. Batch collection adds and BibTeX/RIS imports are available to signed-in Free accounts. Collection merge and batch move require an Academic or Business plan; those endpoints return HTTP 403 to a Free account:
{
"error": "plan_required",
"message": "This feature requires an Academic (EUR 4/mo) or Business (EUR 10/mo) plan.",
"upgrade_url": "https://my.turtletech.us"
}
Collection Entry Limits#
Plan |
Collections |
Entries per collection |
|---|---|---|
Free |
4 |
200 |
Academic |
10 |
1,000 |
Business |
20 |
4,000 |
Reset#
Daily limits reset 24 hours after your first lookup of the day. Monthly limits reset on the first of each month.
Structured quota policy#
GET /api/v1/quota-policy returns the limits for Anonymous and Free use,
the caller’s active plan, remaining lookups, reset interval, and symbolic
account actions. Actions are stable identifiers such as sign_in,
create_free_account, and view_plans; the response contains no redirect
URL.
Quota exhaustion returns HTTP 429 with the same active-plan fields, a stable
quota_exhausted error kind, a bounded human-readable message, and
retry_after. Retry-After, X-RateLimit-Limit,
X-RateLimit-Remaining, and X-RateLimit-Reset match the JSON body.
{
"error": "quota_exhausted",
"message": "Daily limit reached (20/day).",
"retry_after": 3600,
"anonymous_daily_limit": 20,
"free_daily_limit": 60,
"active_plan": "Anonymous",
"limit": 20,
"remaining": 0,
"reset_seconds": 3600,
"actions": ["sign_in", "create_free_account", "view_plans"]
}
Burst Limit#
Anonymous traffic is limited to 100 requests/minute per IP address. Authenticated traffic is limited to 600 requests/minute per credential.