Skip to content

Rate Limits

BiomAPI tracks usage across four independent engine types:

EngineWhat it covers
biomaiPDF/image extraction using shared Gemini quota
biomai_byokPDF/image extraction using your own Gemini key (BYOK)
biomjsonJSON upload validation (no LLM call)
retrieveBiomPIN retrieval

EngineDefault limit
biomai30
biomai_byok1,000
biomjson300
retrieve1,000

Configured per API key in API_KEYS_JSON. Typical quota:

EngineDefault
biomai300
biomai_byok3,000
biomjson3,000
retrieve10,000

Authenticated requests are tracked by user ID, not IP. Both IP and user counters are maintained; whichever applies is checked.


All limits use a 24-hour sliding window (not a midnight calendar reset). Usage timestamps roll off exactly 24 hours after they were recorded, giving a continuously refreshing window.


Rate limits are consumed only after a successful extraction. Files that fail validation, parse errors, or LLM failures do not count against your quota — only successful results do.


Terminal window
GET /api/v1/biom/usage
{
"auth_type": "public",
"user_id": null,
"engines": {
"biomai": { "used": 5, "limit": 30, "resets_in_seconds": 72400 },
"biomai_byok": { "used": 0, "limit": 1000, "resets_in_seconds": 72400 },
"biomjson": { "used": 2, "limit": 300, "resets_in_seconds": 72400 },
"retrieve": { "used": 12, "limit": 1000, "resets_in_seconds": 72400 }
},
"keys": {
"biomapi": { "provided": false },
"gemini": { "provided": false }
}
}

When a limit is exceeded, the API returns HTTP 429 Too Many Requests:

{
"success": false,
"error": {
"code": "RATE_LIMIT_EXCEEDED",
"message": "Rate limit exceeded for biomai engine"
}
}

The resets_in_seconds field in /usage tells you how long until the oldest tracked request rolls off.