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.