Forkbit

Guides

Rate limits

Forkbit tracks two independent limits on every request: a monthly credit budget for what you are billed for, and a per-minute request rate for how fast you can call us.

Credits vs. request rate

Credits reset monthly and cost different amounts per endpoint because endpoints have different unit economics: a search hits Postgres, a parse hits an LLM. Request rate resets every 60 seconds and is the same regardless of which endpoint you call. Running out of either one returns a 429, but with a different error code and different response headers.

Credit weights

EndpointCost
GET /v1/foods/search1 credit
GET /v1/foods/{id}1 credit
POST /v1/foods/batch1 credit per item
POST /v1/parse10 credits
POST /v1/recipes/analyze10 credits per ingredient line

Every response, success or error, includes your current credit status:

response headers
X-Credits-Consumed: 10
X-Credits-Remaining: 48990
X-Credits-Reset: 2026-07-01T00:00:00Z

When a request would push you over your monthly limit, the API returns 429 with code CREDIT_LIMIT_REACHED. The check is atomic: partial-cost endpoints like batch and recipe analysis are charged the full cost of the request or rejected outright. You are never charged for a rejected request.

Request rate limits

Independent of credits, each account can send a limited number of requests per minute. The limit is shared across every API key on the account, not per key, and the window resets every 60 seconds.

PlanRequests / minute
Free60
Starter300
Growth1,000
Pro6,000

Every response also includes your current rate-limit status:

response headers
X-RateLimit-Limit: 300
X-RateLimit-Remaining: 287
X-RateLimit-Reset: 1751328000

Exceeding the window returns 429 with code RATE_LIMITED, distinct from a credit-limit 429. X-RateLimit-Reset is a Unix timestamp (seconds) marking when the window resets. Back off until that time and retry. This is a request-rate problem, not a billing problem, so upgrading your plan raises the ceiling but a short retry usually resolves it immediately.

Caching

You may cache responses for the duration of your active subscription. There is no mandatory TTL and no attribution requirement.